FromJson и ToJson для моей собственной структуры

Я не могу сделать свою структуру кодируемой/декодируемой:

enum MyEnum {
  Enum1,
  Enum2,
  Enum3,
}

#[derive(RustcDecodable, RustcEncodable)]
pub struct MyStruct {
  val1: MyEnum,
  val2: i32,
  val3 : BTreeMap<i64, Json>,
}

Ошибки:

the trait `rustc_serialize::serialize::Decodable` is not implemented for the type `rustc_serialize::json::Json`
the trait `rustc_serialize::serialize::Decodable` is not implemented for the type `rustc_serialize::json::MyEnum`

Я смущен тем, что мне нужно реализовать?

Вместо RustcEncodable мне нужно реализовать ToJson#to_json. А как же RustcDecodable? Нет черты FromJson#from_json

В документации написано rustc_serialize::Decodable/Encodable Но нужен ли мне Decodable, если есть ToJson#to_json?

В любом случае, вопрос в том, как сделать мою собственную структуру кодируемой и декодируемой из JSON?


person Community    schedule 19.09.2015    source источник
comment
Обратите внимание, что стиль Rust — это отступы в 4 пробела.   -  person Shepmaster    schedule 20.09.2015
comment
Не могли бы вы объяснить, почему вы также не аннотировали MyEnum с помощью #[derive(RustcDecodable, RustcEncodable)]? Не могли бы вы также объяснить, почему вы хотите иметь поле val3: BTreeMap<i64, Json>, в частности, что оно может представлять?   -  person Shepmaster    schedule 20.09.2015
comment
@Shepmaster, 1) хорошо 2) нет, я не могу объяснить. Я хочу просто решить это.   -  person    schedule 20.09.2015


Ответы (1)


Вероятно, вам не следует использовать rustc_serialize. Он плохо спроектирован и медленный, поддерживается очень мало форматов. Serde — рекомендуемый контейнер для сериализации и десериализации. Он работает как на стабильной, так и на ночной.

person Pyfisch    schedule 19.09.2015
comment
Это не выглядит смешно и ужасно сложно для понимания в примере кода в репо.. .Может вы пробовали старую версию с плохой эргономикой? - person aochagavia; 20.09.2015
comment
Использовать serde на самом деле очень просто. Написание библиотеки для поддержки другого формата требует написания большого количества кода, но все действительно необходимо, и serde выглядит хорошо спроектированным. - person Pyfisch; 21.09.2015