dyn_serde

Crates.iodyn_serde
lib.rsdyn_serde
version1.1.2
created_at2024-12-14 14:44:51.521262+00
updated_at2025-08-11 03:26:11.187395+00
descriptiondynamic serialization and deserialization based on serde
homepagehttps://crates.io/crates/dyn_serde
repositoryhttps://github.com/HyfLink/dyn_serde
max_upload_size
id1483190
size800,718
Huang Yifan (HyfLink)

documentation

https://docs.rs/dyn_serde

README

Dyn Serde

This crate provides support for dynamic serialization and deserialization based on serde with better performance and without unsafe codes.

Overview

This crate provides three dyn-compatible version of the serde traits:

  1. Serialize - dyn-compatible version of serde::Serialize:

  2. Serializer - dyn-compatible version of serde::Serializer:

  3. Deserializer - dyn-compatible version of serde::Deserializer:

Examples

Serialization

Following example demonstrates how to perform serialization with a dynamic serializer:

use serde::Serialize
use dyn_serde::Serializer;

// 1. Creates dynamic serializer using `<dyn Serializer>::new`.
let mut buffer = Vec::with_capacity(64);
let mut serializer = serde_json::Serializer::new(std::io::Cursor::new(&mut buffer));
let mut serializer = <dyn Serializer>::new(&mut serializer);
let serializer: &mut dyn Serializer = &mut serializer;

// 2. Just uses the dynamic serializer as a `serde::Serializer`.
let value = "Hello, world!";
value.serialize(serializer).unwrap();
assert_eq!(buffer, b"\"Hello, world!\"");

Deserialization

Following example demonstrates how to perform deserialization with a dynamic deserializer, which is basically the same as serialization:

use serde::Deserialize;
use dyn_serde::Deserializer;

// 1. Creates dynamic deserializer using `<dyn Deserializer>::new`.
let mut deserializer = serde_json::Deserializer::from_str("\"Hello, world!\"");
let mut deserializer = <dyn Deserializer>::new(&mut deserializer);
let deserializer: &mut dyn Deserializer = &mut deserializer;

// 2. Just uses the dynamic deserializer as a `serde::Deserializer`.
let value = String::deserialize(deserializer).unwrap();
assert_eq!(value, "Hello, world!");

No-std support

To opt off the Rust standard library, you can disable feature std:

dyn_serde = { version = "*", default-features = false }

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Commit count: 11

cargo fmt