我正在尝试使用Serde库在Rust中反序列化YAML配置文件。在许多地方,该格式使用驱动程序的约定,即,名为“ driver”的字段确定配置适用于哪种对象。例如,这将是两个有效的配置:
reader:
driver: file
path: /var/log/foo
reader:
driver: http
port: 8080
endpoint: /api/bar
我要反序列化为以下结构:
struct Settings {
reader: Reader,
}
trait Reader {}
struct FileReader {
path: String,
}
impl Reader for FileReader {}
struct HttpReader {
port: u32,
endpoint: String,
}
impl Reader for HttpReader {}
有什么方法可以指示Serde反序列化为这些结构,最好是无需自己执行实现?我可以通过引入枚举之类的方式修改结构以使其更易于反序列化吗?