#![allow(clippy::unknown_clippy_lints)]
#![allow(clippy::match_like_matches_macro)]
#[macro_use]
extern crate bitflags;
extern crate byteorder;
#[macro_use]
extern crate serde_derive;
extern crate num_enum;
extern crate serde;
mod bitwidth;
mod builder;
mod flexbuffer_type;
mod reader;
mod buffer;
pub use bitwidth::BitWidth;
pub use builder::Error as SerializationError;
pub use builder::{
singleton, Builder, BuilderOptions, FlexbufferSerializer, MapBuilder, Pushable, VectorBuilder,
};
pub use flexbuffer_type::FlexBufferType;
pub use buffer::Buffer;
pub use reader::Error as ReaderError;
pub use reader::{DeserializationError, MapReader, Reader, ReaderIterator, VectorReader};
use serde::{Deserialize, Serialize};
mod private {
pub trait Sealed {}
}
pub fn to_vec<T: Serialize>(x: T) -> Result<Vec<u8>, SerializationError> {
let mut s = FlexbufferSerializer::new();
x.serialize(&mut s)?;
Ok(s.take_buffer())
}
pub fn from_slice<'de, T: Deserialize<'de>>(buf: &'de [u8]) -> Result<T, DeserializationError> {
let r = Reader::get_root(buf)?;
T::deserialize(r)
}
pub fn from_buffer<'de, T: Deserialize<'de>, B: Buffer>(
buf: &'de B
) -> Result<T, DeserializationError> {
let r = Reader::get_root(buf as &'de [u8])?;
T::deserialize(r)
}
#[derive(Debug, PartialEq, Eq)]
pub struct Blob<B>(pub B);
impl<B: Buffer> Clone for Blob<B> {
fn clone(&self) -> Self {
Blob(self.0.shallow_copy())
}
}
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub struct IndirectUInt(pub u64);
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub struct IndirectInt(pub i64);
#[derive(Debug, Copy, Clone, PartialEq)]
pub struct IndirectFloat(pub f64);