Skip to content

Conventions

By convention a Serde data format crate provides the following in the root module or re-exported from the root module:

  • An Error type common to both serialization and deserialization.
  • A Result typedef which is equivalent to std::result::Result<T, Error>.
  • A Serializer type which implements serde::Serializer.
  • A Deserializer type which implements serde::Deserializer.
  • One or more to_abc functions depending on what types the format supports serializing to. For example to_string which returns a String, to_bytes which returns a Vec<u8>, or to_writer which writes into an [io::Write].
  • One or more from_xyz functions depending on what types the format supports deserializing from. For example from_str which takes a &str, from_bytes which takes a &[u8], or from_reader which takes an [io::Read].

In addition, formats that provide serialization-specific or deserialization-specific APIs beyond Serializer and Deserializer should expose those under top-level ser and de modules. For example serde_json provides a pluggable pretty-printer trait as [serde_json::ser::Formatter].

A basic data format begins like this. The three modules are discussed in more detail on the following pages.

!FILENAME src/lib.rs

# macro_rules! modules {
#     (mod de) => {
#         mod de {
#             pub fn from_str() {}
#             pub type Deserializer = ();
#         }
#     };
#     (mod error) => {
#         mod error {
#             pub type Error = ();
#             pub type Result = ();
#         }
#     };
#     (mod ser) => {
#         mod ser {
#             pub fn to_string() {}
#             pub type Serializer = ();
#         }
#     };
#     ($(mod $n:ident;)+) => {
#         $(
#             modules!(mod $n);
#         )+
#     };
# }
#
# modules! {
mod de;
mod error;
mod ser;
# }

pub use de::{from_str, Deserializer};
pub use error::{Error, Result};
pub use ser::{to_string, Serializer};
#
# fn main() {}