1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
//! This crate offers a replacement for `serde-json`'s `Value` type, which is
//! significantly more memory efficient.
//!
//! As a ballpark figure, it will typically use half as much memory as
//! `serde-json` when deserializing a value and the memory footprint of cloning
//! a value is more than 7x smaller.
//!
//! The primary type exposed by this crate is the [`IValue`] type. It is guaranteed
//! to be pointer-sized and has a niche (so `Option<IValue>` is also guaranteed
//! to be pointer-sized).
//!
//! Cargo features:
//!
//! - `ctor`
//! A global string cache is used when interning strings. This cache is normally
//! initialized lazily on first use. Enabling the `ctor` feature will cause it
//! to be eagerly initialized on startup.
//! There is no performance benefit to this, but it can help avoid false positives
//! from tools like `mockalloc` which try to detect memory leaks during tests.
#![deny(missing_docs, missing_debug_implementations)]
#[macro_use]
mod macros;
pub mod array;
pub mod number;
pub mod object;
pub mod string;
mod value;
pub use array::IArray;
pub use number::INumber;
pub use object::IObject;
pub use string::IString;
pub use value::{
BoolMut, Destructured, DestructuredMut, DestructuredRef, IValue, ValueIndex, ValueType,
};
mod de;
mod ser;
pub use de::from_value;
pub use ser::to_value;
#[cfg(test)]
mod tests {
use mockalloc::Mockalloc;
use std::alloc::System;
#[global_allocator]
static ALLOCATOR: Mockalloc<System> = Mockalloc(System);
}