Как serde преобразует значение внутри строки в тип - PullRequest
0 голосов
/ 20 октября 2018

Я построил ECS (я думаю, что он простой), и я создал механизм для загрузки внешних данных (шаблонов сущностей) в свою программу, проблема в том, как преобразовать уже загруженные данные втип.

Поскольку Serde делает это, я подумал посмотреть, как, но на самом деле я не могу найти часть, которая делает это.

Что я имею в виду, когда вы создаетеструктура данных выглядит следующим образом:

person:
  name: Bob
  age: 34

и serde может преобразовать ее в структуру:

struct Person {
   name: String,
   age: i32
}

Как serde преобразует строку person в тип Person

РЕДАКТИРОВАТЬ: Чтобы привести пример на другом языке (ruby):

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 голосов
/ 20 октября 2018

Вы говорите serde, какой тип вам нужен.Он знает типы членов из реализации Derive.

...