Я построил 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
.