serde如何将字符串内的值转换为Type

时间:2018-10-19 21:43:36

标签: rust serde

我已经构建了一个ECS(我认为这很简单),并且已经构建了一种将外部数据(实体模板)加载到程序中的机制,我遇到的问题是如何将已经加载的数据转换为类型。

Serde以来,我一直想去看看怎么做,但我实际上找不到能做到这一点的部分。

我的意思是,当您创建这样的数据结构时:

person:
  name: Bob
  age: 34

serde能够将其转换为结构:

struct Person {
   name: String,
   age: i32
}

serde如何将字符串person转换为类型Person

编辑: 以另一种语言(红宝石)举例:

class Person
  attr_accessor :name, :age
  def initialize(name:, age:)
    @name = name
    @age = age
  end
end

# pretend type was loaded in from the yaml example from the key
type = 'person'

# pretend person_data was loaded in from the yaml example form the value of the key
person_data = {
  name: 'Bob',
  age: 34
}

# and now we get the type and then initialize it
# Just like serde does
const_get(type.capitalize).new(person_data)

现在,Rust显然无法在运行时执行此操作或做到这一点,但serde必须执行某些操作以达到相同的结果,"person"转换为Person

1 个答案:

答案 0 :(得分:1)

您告诉Serde您想要的类型。它从Derive实现中了解成员的类型。