Serializer: Root を実装する
// Copyright 2025 Google LLC // SPDX-License-Identifier: Apache-2.0 use std::fmt::Write as _; struct Serializer<S> { // [...] indent: usize, buffer: String, state: S, } struct Root; struct Struct<S>(S); impl Serializer<Root> { fn new() -> Self { // [...] Self { indent: 0, buffer: String::new(), state: Root } } fn serialize_struct(mut self, name: &str) -> Serializer<Struct<Root>> { // [...] writeln!(self.buffer, "{name} {{").unwrap(); Serializer { indent: self.indent + 1, buffer: self.buffer, state: Struct(self.state), } } fn finish(self) -> String { // [...] self.buffer } }
元の有効な遷移の図を振り返ると、実装の冒頭は次のように視覚化できます。
-
Serializerの「root」では、許可されるのはStructだけです。 -
SerializerをStringに最終化できるのは、この root レベルからのみです。