Skip to main content

Crate ijson

Crate ijson 

Source
Expand description

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:

  • arbitrary_precision Store JSON numbers as their exact decimal value rather than rounding to f64. A short decimal is packed inline; a larger or more precise one spills to a heap arbitrary-precision decimal. With this on, "0.1" is the exact tenth — a different number from the f64 0.1 — and a magnitude beyond f64’s range is representable. It also switches deserialization to preserve the exact literal (via serde_json’s own arbitrary_precision). Off by default; without it every number is exactly an f64.

  • 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.

  • indexmap Adds conversions between IObject and indexmap’s IndexMap.

  • broken-borrow-impl-compat Adds Borrow<str> for IString, for libraries that require it. Unsound to rely on for hash-map keys (see the impl’s own note); enable only as a temporary measure.

  • tracing Forwards to mockalloc’s tracing feature, for allocation tracing under tests.

Re-exports§

pub use array::IArray;
pub use number::INumber;
pub use number::ParseNumberError;
pub use object::IObject;
pub use string::IString;

Modules§

array
Functionality relating to the JSON array type.
number
Functionality relating to the JSON number type.
object
Functionality relating to the JSON object type.
string
Functionality relating to the JSON string type.

Macros§

ijson
Construct an IValue using familiar JSON syntax.

Structs§

BoolMut
A proxy type which imitates a &mut bool.
IValue
Stores an arbitrary JSON value.

Enums§

Destructured
Enum returned by IValue::destructure to allow matching on the type of an owned IValue.
DestructuredMut
Enum returned by IValue::destructure_mut to allow matching on the type of a mutable reference to an IValue.
DestructuredRef
Enum returned by IValue::destructure_ref to allow matching on the type of a reference to an IValue.
ValueType
Enum which distinguishes the six JSON types.

Traits§

ValueIndex
Trait which abstracts over the various number and string types which can be used to index into an IValue.

Functions§

from_value
Converts an IValue to an arbitrary type using that type’s serde::Deserialize implementation.
to_value
Converts an arbitrary type to an IValue using that type’s serde::Serialize implementation.