用serde反序列化为特征的不同实现者?

时间:2019-01-01 16:04:46

标签: rust yaml deserialization serde

我正在尝试使用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反序列化为这些结构,最好是无需自己执行实现?我可以通过引入枚举之类的方式修改结构以使其更易于反序列化吗?

0 个答案:

没有答案