Bug: 179213909

Clone this repo:
  1. 80aff1d Make serde_cbor available to product and vendor am: ee7ed005c6 am: 410147e8cb by Matthew Maurer · 7 months ago build-tools-release main master
  2. 410147e Make serde_cbor available to product and vendor am: ee7ed005c6 by Matthew Maurer · 7 months ago android-u-beta-1-gpl
  3. ee7ed00 Make serde_cbor available to product and vendor by Matthew Maurer · 7 months ago
  4. c50d1e1 Update TEST_MAPPING am: e28bc78a62 am: f920ca3841 by Jeff Vander Stoep · 8 months ago
  5. f920ca3 Update TEST_MAPPING am: e28bc78a62 by Jeff Vander Stoep · 8 months ago

Serde CBOR

Build Status Crates.io Documentation


After almost 6 years it is time to retire this crate. This implementation of CBOR for serde is used in hundreds of projects with widely differing needs. Besides the standard features it contains code for no-std environments, a packed encoding and CBOR tags. However while these features are useful to many people they sometimes interact poorly with each others and with optional features of serde itself. Because I don't use the crate myself and because of the potential for new errors I have been reluctant to accept any changes or additional features for the crate. Since this situation is unlikely to change anytime soon and no one else stepped up to maintain this crate I am archiving the repository today. If the crate works for you there is no need to switch to another implementation. However if you encounter problems or for new projects I recommend you take a look at these crates:

~~ Pyfisch, August 2021

This crate implements the Concise Binary Object Representation from RFC 7049. It builds on Serde, the generic serialization framework for Rust. CBOR provides a binary encoding for a superset of the JSON data model that is small and very fast to parse.


Serde CBOR supports Rust 1.40 and up. Add this to your Cargo.toml:

serde_cbor = "0.11.2"

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;

// Types annotated with `Serialize` can be stored as 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::to_writer(ferris_file, &ferris)?;

    let tux_file = File::open("examples/tux.cbor")?;
    // Load Tux from a file.
    // Serde CBOR performs roundtrip serialization meaning that
    // the data will not change in any way.
    let tux: Mascot = serde_cbor::from_reader(tux_file)?;

    println!("{:?}", tux);
    // prints: Mascot { name: "Tux", species: "penguin", year_of_birth: 1996 }


There are a lot of options available to customize the format. To operate on untyped CBOR values have a look at the Value type.


Licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.