serde.rsで構造体をmsgpackの辞書としてシリアライズするには?
Rustにおいて、自分の定義した構造体
struct MyStruct {
a: i32,
b: f64,
}
をmsgpackの辞書として保存するにはどうすれば良いでしょうか?
serde_derive
を用いて以下のようにした場合、Listとして保存されてしまいます:
extern crate rmp_serde;
extern crate serde;
#[macro_use]
extern crate serde_derive;
use serde::Serialize;
#[derive(Serialize)]
struct A {
a: i32,
b: f64,
}
fn main() {
let f = ::std::fs::File::create("test.msg").ok().unwrap();
let mut buf = ::std::io::BufWriter::new(f);
let mut enc = ::rmp_serde::Serializer::new(&mut buf);
let val = A { a: 12, b: 1.2 };
val.serialize(&mut enc).unwrap();
}
このtest.msg
をmsgpack-cliで表示すると
% msgpack-cli decode test.msg
[12,1.2]
のようにリストで保存されていることがわかります。
これを{a: 12, b: 1.2}
のような辞書形式で保存するには上記のRustコードをどのように変更すればよいでしょうか?