mirror of https://git.sr.ht/~stygianentity/bincode
167 lines
4.8 KiB
Rust
167 lines
4.8 KiB
Rust
#![deny(missing_docs)]
|
|
#![allow(unknown_lints, bare_trait_objects, deprecated)]
|
|
|
|
//! Bincode is a crate for encoding and decoding using a tiny binary
|
|
//! serialization strategy. Using it, you can easily go from having
|
|
//! an object in memory, quickly serialize it to bytes, and then
|
|
//! deserialize it back just as fast!
|
|
//!
|
|
//! ### Using Basic Functions
|
|
//!
|
|
//! ```edition2018
|
|
//! fn main() {
|
|
//! // The object that we will serialize.
|
|
//! let target: Option<String> = Some("hello world".to_string());
|
|
//!
|
|
//! let encoded: Vec<u8> = bincode::serialize(&target).unwrap();
|
|
//! let decoded: Option<String> = bincode::deserialize(&encoded[..]).unwrap();
|
|
//! assert_eq!(target, decoded);
|
|
//! }
|
|
//! ```
|
|
//!
|
|
//! ### 128bit numbers
|
|
//!
|
|
//! Support for `i128` and `u128` is automatically enabled on Rust toolchains
|
|
//! greater than or equal to `1.26.0` and disabled for targets which do not support it
|
|
|
|
#![doc(html_root_url = "https://docs.rs/bincode/1.3.0")]
|
|
#![crate_name = "bincode"]
|
|
#![crate_type = "rlib"]
|
|
#![crate_type = "dylib"]
|
|
|
|
extern crate byteorder;
|
|
#[macro_use]
|
|
extern crate serde;
|
|
|
|
/// Configuration settings for bincode.
|
|
pub mod config;
|
|
/// Deserialize bincode data to a Rust data structure.
|
|
pub mod de;
|
|
|
|
mod error;
|
|
mod internal;
|
|
mod ser;
|
|
|
|
pub use config::{Config, DefaultOptions, Options};
|
|
pub use de::read::BincodeRead;
|
|
pub use de::Deserializer;
|
|
pub use error::{Error, ErrorKind, Result};
|
|
pub use ser::Serializer;
|
|
|
|
/// Get a default configuration object.
|
|
///
|
|
/// ### Default Configuration:
|
|
///
|
|
/// | Byte limit | Endianness |
|
|
/// |------------|------------|
|
|
/// | Unlimited | Little |
|
|
#[inline(always)]
|
|
#[deprecated(since = "1.3.0", note = "please use `options()` instead")]
|
|
pub fn config() -> Config {
|
|
Config::new()
|
|
}
|
|
|
|
/// Get a default configuration object.
|
|
///
|
|
/// ### Default Configuration:
|
|
///
|
|
/// | Byte limit | Endianness | Int Encoding | Trailing Behavior |
|
|
/// |------------|------------|--------------|-------------------|
|
|
/// | Unlimited | Little | Varint | Reject |
|
|
#[inline(always)]
|
|
pub fn options() -> DefaultOptions {
|
|
DefaultOptions::new()
|
|
}
|
|
|
|
/// Serializes an object directly into a `Writer` using the default configuration.
|
|
///
|
|
/// If the serialization would take more bytes than allowed by the size limit, an error
|
|
/// is returned and *no bytes* will be written into the `Writer`.
|
|
pub fn serialize_into<W, T: ?Sized>(writer: W, value: &T) -> Result<()>
|
|
where
|
|
W: std::io::Write,
|
|
T: serde::Serialize,
|
|
{
|
|
DefaultOptions::new()
|
|
.with_fixint_encoding()
|
|
.serialize_into(writer, value)
|
|
}
|
|
|
|
/// Serializes a serializable object into a `Vec` of bytes using the default configuration.
|
|
pub fn serialize<T: ?Sized>(value: &T) -> Result<Vec<u8>>
|
|
where
|
|
T: serde::Serialize,
|
|
{
|
|
DefaultOptions::new()
|
|
.with_fixint_encoding()
|
|
.allow_trailing_bytes()
|
|
.serialize(value)
|
|
}
|
|
|
|
/// Deserializes an object directly from a `Read`er using the default configuration.
|
|
///
|
|
/// If this returns an `Error`, `reader` may be in an invalid state.
|
|
pub fn deserialize_from<R, T>(reader: R) -> Result<T>
|
|
where
|
|
R: std::io::Read,
|
|
T: serde::de::DeserializeOwned,
|
|
{
|
|
DefaultOptions::new()
|
|
.with_fixint_encoding()
|
|
.allow_trailing_bytes()
|
|
.deserialize_from(reader)
|
|
}
|
|
|
|
/// Deserializes an object from a custom `BincodeRead`er using the default configuration.
|
|
/// It is highly recommended to use `deserialize_from` unless you need to implement
|
|
/// `BincodeRead` for performance reasons.
|
|
///
|
|
/// If this returns an `Error`, `reader` may be in an invalid state.
|
|
pub fn deserialize_from_custom<'a, R, T>(reader: R) -> Result<T>
|
|
where
|
|
R: de::read::BincodeRead<'a>,
|
|
T: serde::de::DeserializeOwned,
|
|
{
|
|
DefaultOptions::new()
|
|
.with_fixint_encoding()
|
|
.allow_trailing_bytes()
|
|
.deserialize_from_custom(reader)
|
|
}
|
|
|
|
/// Only use this if you know what you're doing.
|
|
///
|
|
/// This is part of the public API.
|
|
#[doc(hidden)]
|
|
pub fn deserialize_in_place<'a, R, T>(reader: R, place: &mut T) -> Result<()>
|
|
where
|
|
T: serde::de::Deserialize<'a>,
|
|
R: BincodeRead<'a>,
|
|
{
|
|
DefaultOptions::new()
|
|
.with_fixint_encoding()
|
|
.allow_trailing_bytes()
|
|
.deserialize_in_place(reader, place)
|
|
}
|
|
|
|
/// Deserializes a slice of bytes into an instance of `T` using the default configuration.
|
|
pub fn deserialize<'a, T>(bytes: &'a [u8]) -> Result<T>
|
|
where
|
|
T: serde::de::Deserialize<'a>,
|
|
{
|
|
DefaultOptions::new()
|
|
.with_fixint_encoding()
|
|
.allow_trailing_bytes()
|
|
.deserialize(bytes)
|
|
}
|
|
|
|
/// Returns the size that an object would be if serialized using Bincode with the default configuration.
|
|
pub fn serialized_size<T: ?Sized>(value: &T) -> Result<u64>
|
|
where
|
|
T: serde::Serialize,
|
|
{
|
|
DefaultOptions::new()
|
|
.with_fixint_encoding()
|
|
.allow_trailing_bytes()
|
|
.serialized_size(value)
|
|
}
|