やりたいこと
ネットワークからメッセージを受信した瞬間に受信したデータをメモリ内にバッファリングせずJSONでシリアライズし、即時吐き出したい場合はどうしたら良いでしょう。
受信したメッセージは配列の一要素として吐き出したいです。
(ログを一つのJSONオブジェクトとして吐き出すようなイメージです。)
雰囲気(ビルドエラーになります)
rust
1struct SeqSerializer{ 2 seq: Compound<'a, &'a mut dyn Write, CompactFormatter>, 3} 4impl SeqSerializer { 5 // 初期化 6 fn new() -> Self { 7 let writer = std::io::stdout(); 8 let mut seq = serde_json::Serializer::new(writer); 9 let mut seq = seq.serialize_seq(None).unwrap(); 10 SeqSerializer { seq: seq } // ↑がキャプチャしてるので返せない。 11 } 12 // 通信がオープンした 13 fn open(&self) {} 14 // メッセージを受信した 15 fn receive_message(&self, msg: String) { 16 seq.serialize_element(msg); 17 } // 通信がクローズされた 18 fn close(&self) { 19 seq.end(); 20 } 21} 22
依存関係は以下のとおりです。
toml
1[dependencies] 2serde_derive = "1.0.115" 3serde = "1.0.115" 4serde_json = "1.0.57"
コメントで記載した通り、seq._serialize_seqがキャプチャしてしまうため、意図したコードを書くことができません。
こういった
「初期化」
「使用」
「後処理」
をバラバラに使う場合、どのようにすれば書くことができるのでしょうか。
それともこのような使い方は、そもそもおかしいからやめろということでしょうか。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。