Rust 使用结构在枚举之间转换

Rust 使用结构在枚举之间转换,rust,Rust,我正在尝试设计一个系统,它有许多不同的子系统,每个子系统都可以有多个可能的实现,每个子系统都由一个公共代码路径调用。类似这样(注意,每个子系统可以有相同的A、B和C实现): 为了配置系统,我创建了一个枚举,用于将配置常规存储到A、B和C,如下所示: //版权所有2020谷歌有限责任公司。 //SPDX许可证标识符:Apache-2.0 发布枚举系统配置{ A(乌头图), B(BConfig), C(CConfig), } 但是,在公共代码路径中调用每个子系统时,除了Config结构之外,我还想

我正在尝试设计一个系统,它有许多不同的子系统,每个子系统都可以有多个可能的实现,每个子系统都由一个公共代码路径调用。类似这样(注意,每个子系统可以有相同的A、B和C实现):

为了配置系统,我创建了一个枚举,用于将配置常规存储到A、B和C,如下所示:

//版权所有2020谷歌有限责任公司。
//SPDX许可证标识符:Apache-2.0
发布枚举系统配置{
A(乌头图),
B(BConfig),
C(CConfig),
}
但是,在公共代码路径中调用每个子系统时,除了Config结构之外,我还想向调用中添加一些子系统特定的参数,如下所示:

//版权所有2020谷歌有限责任公司。
//SPDX许可证标识符:Apache-2.0
发布枚举子系统1参数{
A(ASUBSystem1参数),
B(B子系统1参数),
C(C子系统1参数),
}
发布结构ASubSystem1Params{
配置:AConfig,
…调用ASubSystem1所需的其他参数
}
...
在这两个枚举之间转换的最佳方式是什么?从SystemConfig到SubSystem1Params以及从SubSystem1Params到SystemConfig?有没有比使用匹配项手动实现(和调用)这样的函数更干净的方法

//版权所有2020谷歌有限责任公司。
//SPDX许可证标识符:Apache-2.0
fn至系统配置(子系统1参数:子系统1参数)->system{
匹配子系统1参数{
A(A)=>A.config,
B(B)=>B.config,
C(C)=>C.config,
}
}
fn至子系统1参数(系统配置:系统配置)->子系统1配置{
赛制{
A(A)=>子系统1参数{config:A,…A}的其他参数,
B(B)=>子系统1参数{config:B,…B}的其他参数,
C(C)=>子系统1参数{config:C,…C}的其他参数,
}
}
我明确想要避免的是这样的事情:

//版权所有2020谷歌有限责任公司。
//SPDX许可证标识符:Apache-2.0
发布结构子系统1CallParams{
config:SystemConfig,
参数:子系统1参数,
}
因为无法确保config和params具有相同的enum值,所以我想使config不可能是一种类型(比如a),params不可能是另一种类型(比如B)

                          /--- ASubSystem1
          /--- SubSystem1 ---- BSubSystem1
         /                \--- CSubSystem1
        /
       /                  /--- ASubSystem2
System ------- SubSystem2 ---- BSubSystem2
       \                  \--- CSubSystem2
        \
         \                /--- ASubSystem3
          \--- SubSystem3 ---- BSubSystem3
                          \--- CSubSystem3