Revision control
Copy as Markdown
Other Tools
#![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↩
↩
#![crate_name = "bincode"]↩
#![crate_type = "rlib"]↩
#![crate_type = "dylib"]↩
↩
#[macro_use]↩
extern crate serde;↩
↩
pub mod config;↩
/// Deserialize bincode data to a Rust data structure.↩
pub mod de;↩
↩
mod byteorder;↩
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.↩
///↩
/// **Warning:** the default configuration returned by this function↩
/// is not the same as that used by the other functions in this↩
/// module. See the↩
/// [config](config/index.html#options-struct-vs-bincode-functions)↩
/// module for more details↩
///↩
/// ### 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`.↩
///↩
/// **Warning:** the default configuration used by this function is not↩
/// the same as that used by the `DefaultOptions` struct. See the↩
/// [config](config/index.html#options-struct-vs-bincode-functions)↩
/// module for more details↩
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.↩
///↩
/// **Warning:** the default configuration used by this function is not↩
/// the same as that used by the `DefaultOptions` struct. See the↩
/// [config](config/index.html#options-struct-vs-bincode-functions)↩
/// module for more details↩
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.↩
///↩
/// **Warning:** the default configuration used by this function is not↩
/// the same as that used by the `DefaultOptions` struct. See the↩
/// [config](config/index.html#options-struct-vs-bincode-functions)↩
/// module for more details↩
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.↩
///↩
/// **Warning:** the default configuration used by this function is not↩
/// the same as that used by the `DefaultOptions` struct. See the↩
/// [config](config/index.html#options-struct-vs-bincode-functions)↩
/// module for more details↩
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.↩
///↩
/// **Warning:** the default configuration used by this function is not↩
/// the same as that used by the `DefaultOptions` struct. See the↩
/// [config](config/index.html#options-struct-vs-bincode-functions)↩
/// module for more details↩
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.↩
///↩
/// **Warning:** the default configuration used by this function is not↩
/// the same as that used by the `DefaultOptions` struct. See the↩
/// [config](config/index.html#options-struct-vs-bincode-functions)↩
/// module for more details↩
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)↩
}↩