#deserialize #cow #serde #string #optimization

no-std serde_cow

A library with more efficent serde deserializations for Cow

3 releases

0.1.2 Jul 17, 2024
0.1.1 Jul 17, 2024
0.1.0 Mar 24, 2024

#2111 in Parser implementations

Download history 3820/week @ 2024-08-09 4580/week @ 2024-08-16 4694/week @ 2024-08-23 4539/week @ 2024-08-30 4763/week @ 2024-09-06 4577/week @ 2024-09-13 4638/week @ 2024-09-20 4491/week @ 2024-09-27 4742/week @ 2024-10-04 5544/week @ 2024-10-11 7422/week @ 2024-10-18 4648/week @ 2024-10-25 5092/week @ 2024-11-01 6024/week @ 2024-11-08 6535/week @ 2024-11-15 5862/week @ 2024-11-22

24,275 downloads per month
Used in 36 crates (via serenity)

MIT license

6KB
84 lines

serde-cow

See the documentation on docs.rs or build locally with cargo doc --no-deps --open.

Minimum Supported Rust Version

This is currently 1.56 and is considered a breaking change to increase.


lib.rs:

A small library with a [Cow] wrappers that implements serde::Deserialize in the ways that should be expected.

By default, [Cow] is always deserialized to the Cow::Owned variant due to a lack of specialisation, but this library provides CowStr and CowBytes which deserialize to Cow::Borrowed if possible, borrowing from the original data.

Example

use std::borrow::Cow;

use serde_cow::CowStr;

let source = r#""Hello World""#;

let normal: Cow<str> = serde_json::from_str(source).unwrap();
assert!(matches!(normal, Cow::Owned(_))); // Wasteful!

let efficent: CowStr = serde_json::from_str(source).unwrap();
assert!(matches!(efficent.0, Cow::Borrowed(_))); // Zero copy!

Minimum Supported Rust Version

This is currently 1.56 and is considered a breaking change to increase.

Dependencies

~105–335KB