| Crates.io | toon-rs |
| lib.rs | toon-rs |
| version | 2.1.0 |
| created_at | 2026-01-02 05:40:31.036153+00 |
| updated_at | 2026-01-02 05:45:31.856584+00 |
| description | TOON format encoder/decoder with serde integration |
| homepage | https://toonformat.dev |
| repository | https://github.com/jimmystridh/toon-rs |
| max_upload_size | |
| id | 2018050 |
| size | 330,970 |
Rust library for TOON (Token-Oriented Object Notation). Provides:
serde (default): serde integrationde_direct: direct serde::Deserializer over the scanner (no intermediate JSON Value)perf_memchr, perf_smallvec, perf_lexical: optional micro-optimizationschrono: serialize chrono::DateTime as RFC3339 stringsEnable performance features for fastest decode (optional):
# Library
cargo add toon-rs --features "de_direct perf_memchr perf_smallvec"
# Or enable per build
RUSTFLAGS='' cargo test -p toon-rs --features "de_direct perf_memchr perf_smallvec"
use serde_json::json;
let opts = toon_rs::Options::default();
let s = toon_rs::encode_to_string(&json!({"a": 1, "b": [true, "x"]}), &opts).unwrap();
let v: serde_json::Value = toon_rs::decode_from_str(&s, &opts).unwrap();
assert_eq!(v, json!({"a":1, "b":[true, "x"]}));
Typed APIs:
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct User { id: u32, name: String }
let opts = toon_rs::Options::default();
let user = User { id: 1, name: "Ada".into() };
let s = toon_rs::ser::to_string_streaming(&user, &opts).unwrap();
let back: User = toon_rs::de::from_str(&s, &opts).unwrap();
assert_eq!(user, back);
git submodule update --init --recursiveTOON_CONFORMANCE=1 cargo test -p toon-rs --testsMIT