#![no_std]
#![warn(missing_docs, unused_lifetimes)]
#![cfg_attr(docsrs, feature(doc_cfg))]
#![doc(html_root_url = "https://docs.rs/bincode/2.0.0-beta.2")]
#![crate_name = "bincode"]
#![crate_type = "rlib"]
#[cfg(feature = "alloc")]
extern crate alloc;
#[cfg(any(feature = "std", test))]
extern crate std;
mod features;
pub(crate) mod utils;
pub(crate) mod varint;
use de::{read::Reader, Decoder};
use enc::write::Writer;
pub use features::*;
pub mod config;
pub mod de;
pub mod enc;
pub mod error;
pub use de::{BorrowDecode, Decode};
pub use enc::Encode;
use config::Config;
pub fn encode_into_slice<E: enc::Encode, C: Config>(
val: E,
dst: &mut [u8],
config: C,
) -> Result<usize, error::EncodeError> {
let writer = enc::write::SliceWriter::new(dst);
let mut encoder = enc::EncoderImpl::<_, C>::new(writer, config);
val.encode(&mut encoder)?;
Ok(encoder.into_writer().bytes_written())
}
pub fn encode_into_writer<E: enc::Encode, W: Writer, C: Config>(
val: E,
writer: W,
config: C,
) -> Result<(), error::EncodeError> {
let mut encoder = enc::EncoderImpl::<_, C>::new(writer, config);
val.encode(&mut encoder)?;
Ok(())
}
pub fn decode_from_slice<'a, D: de::BorrowDecode<'a>, C: Config>(
src: &'a [u8],
config: C,
) -> Result<(D, usize), error::DecodeError> {
let reader = de::read::SliceReader::new(src);
let mut decoder = de::DecoderImpl::<_, C>::new(reader, config);
let result = D::borrow_decode(&mut decoder)?;
let bytes_read = src.len() - decoder.reader().slice.len();
Ok((result, bytes_read))
}
pub fn decode_from_reader<D: de::Decode, R: Reader, C: Config>(
reader: R,
config: C,
) -> Result<D, error::DecodeError> {
let mut decoder = de::DecoderImpl::<_, C>::new(reader, config);
D::decode(&mut decoder)
}
#[cfg(all(feature = "alloc", feature = "derive", doc))]
pub mod spec {
#![doc = include_str!("../docs/spec.md")]
}
#[cfg(doc)]
pub mod migration_guide {
#![doc = include_str!("../docs/migration_guide.md")]
}
#[cfg(all(feature = "alloc", feature = "derive", doctest))]
mod readme {
#![doc = include_str!("../readme.md")]
}