複雑ではないが、自然な JSON 表現を持たない型のカスタム シリアライザーとデリアライザーを作成しようとしています。
pub type ArrayKey = [i16; 5];
pub struct ArrayKeyedMap {
the_map: HashMap<ArrayKey, u32>
}
配列キーを持つ HashMap は、JSON マップ (文字列キーを持つ必要があります) として表すことはできません。だから私はペアのシーケンスとしてそれをシリアライズしたい. シーケンスのシリアル化のドキュメントは非常に明確で、次のように機能します。
impl Serialize for ArrayKeyedMap {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut seq = serializer.serialize_seq(Some(self.the_map.len()))?;
for (the_key, the_val) in self.the_map.iter() {
seq.serialize_element(the_key)?;
seq.serialize_element(the_val)?;
}
seq.end()
}
}
これは、eg としてシリアル化され[[1,2,3,4,5], 1, [5,4,3,2,1], 2]
ます。シーケンスのデシリアライゼーションに関するドキュメントは、従うのがそれほど簡単ではなく、ビジターとSeqDeserializer
. 何かを渡すつもりなのか、戻り値を取得するつもりなのか、それとも何か他のことなのかわかりません。
impl<'de> Deserialize<'de> for ArrayKeyedMap
{
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
deserializer.deserialize_seq(SeqDeserializer::new // not sure how to proceed
}
}
これを配列キーを使用してマップに逆シリアル化するにはどうすればよいですか?