| Crates.io | serde_cbor_core |
| lib.rs | serde_cbor_core |
| version | 0.1.0 |
| created_at | 2025-07-19 08:08:54.970448+00 |
| updated_at | 2025-07-19 08:08:54.970448+00 |
| description | CBOR Core/RFC 8949 deterministic encoding implementation for Serde |
| homepage | |
| repository | https://github.com/gordonbrander/serde_cbor_core |
| max_upload_size | |
| id | 1760001 |
| size | 121,076 |
This is a Serde implementation for CBOR Core. It provides a deterministic encoding for CBOR, detailed Section 4.2.1. of RFC 8949 and expanded on in the IETF draft for CBOR Core.
Deterministic encoding means the same CBOR will be encoded the same way, every time. This is useful when signing or hashing data, since it guarantees the same data will produce the same hash/sig.
The underlying library for CBOR encoding/decoding is cbor4ii and the Serde implementation is also heavily based on their code.
This crate started as a fork of serde_ipld_dagcbor. Many thanks to everyone involved there.
Storing and loading Rust types is easy and requires only minimal modifications to the program code.
use serde_derive::{Deserialize, Serialize};
use std::error::Error;
use std::fs::File;
use std::io::BufReader;
// Types annotated with `Serialize` can be stored as DAG-CBOR.
// To be able to load them again add `Deserialize`.
#[derive(Debug, Serialize, Deserialize)]
struct Mascot {
name: String,
species: String,
year_of_birth: u32,
}
fn main() -> Result<(), Box<dyn Error>> {
let ferris = Mascot {
name: "Ferris".to_owned(),
species: "crab".to_owned(),
year_of_birth: 2015,
};
let ferris_file = File::create("examples/ferris.cbor")?;
// Write Ferris to the given file.
// Instead of a file you can use any type that implements `io::Write`
// like a HTTP body, database connection etc.
serde_cbor_core::to_writer(ferris_file, &ferris)?;
let tux_file = File::open("examples/tux.cbor")?;
let tux_reader = BufReader::new(tux_file);
// Load Tux from a file.
// Performs roundtrip serialization meaning that the data will not change in any way.
let tux: Mascot = serde_cbor_core::from_reader(tux_reader)?;
println!("{tux:?}");
// prints: Mascot { name: "Tux", species: "penguin", year_of_birth: 1996 }
Ok(())
}
Licensed under either of
at your option.