commit | c62153c254fabcfcfebae096db3cccff569581f9 | [log] [tgz] |
---|---|---|
author | James Farrell <[email protected]> | Thu Aug 29 16:49:55 2024 +0000 |
committer | James Farrell <[email protected]> | Thu Aug 29 16:49:55 2024 +0000 |
tree | f665f712bb7d8da4e4a643b506d33a97597f0eb3 | |
parent | 644265cabb60767e6d09fdad59c9196d8a28d6bf [diff] |
Migrate 25 crates to monorepo. sec1 semver serde_cbor serde_derive shared_library slab smallvec smccc socket2 spin spki strsim strum strum_macros sync_wrapper syn-mid synstructure tempfile termcolor termtree textwrap thiserror thread_local tinytemplate tokio-macros Bug: 339424309 Test: treehugger Change-Id: I72b2f3fb195517da11df8c9fe648c977f2272ec4
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
:
[dependencies] 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 } Ok(()) }
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.