约定(Conventions)
按照惯例,一个 Serde 数据格式的 crate 在根模块中应该提供以下内容或从根模块重新导出:
- 一个错误类型,用于序列化和反序列化。
- 一个结果类型定义,等同于 std::result::Result<T, Error>。
- 一个实现了 serde::Serializer 的 Serializer 类型。
- 一个实现了 serde::Deserializer 的 Deserializer 类型。
- 一个或多个 to_abc 函数,取决于该格式支持序列化成什么类型。例如,to_string 返回一个字符串,to_bytes 返回一个 Vec<u8>,或者 to_writer 写入一个
io::Write
。 - 一个或多个 from_xyz 函数,取决于该格式支持从什么类型反序列化。例如,from_str 接受一个 &str,from_bytes 接受一个 &[u8],或者 from_reader 接受一个
io::Read
。
另外,如果提供了超出 Serializer 和 Deserializer 之外的序列化或反序列化特定 API,数据格式应该将这些内容公开在顶层的 ser
和 de
模块下。例如,serde_json 提供了一个可插拔的 pretty-printer trait,例如serde_json::ser::Formatter
。
一个基本的数据格式开始如下。这三个模块将在接下来的页面中更详细地讨论。