Skip to main content

DxValue

Enum DxValue 

Source
pub enum DxValue {
    Null,
    Bool(bool),
    Int(i64),
    Float(f64),
    String(String),
    Array(DxArray),
    Object(DxObject),
    Table(DxTable),
    Ref(usize),
}
Expand description

The core value type for the DX machine format (binary, zero-copy).

DxValue represents all possible values in the DX binary format, optimized for maximum parsing performance and zero-copy deserialization.

§Relationship to DxLlmValue

DX provides two value types for different use cases:

  • DxValue (this type): For the binary machine format. Use when you need maximum performance, zero-copy parsing, or runtime data structures.

  • DxLlmValue: For the text LLM format. Use when preparing data for LLM context windows or when token efficiency matters.

The two types have different variant sets because they serve different purposes:

  • DxValue has separate Int and Float variants for type precision
  • DxLlmValue has a single Num variant since LLMs don’t distinguish
  • DxValue has Object and Table for structured data
  • DxLlmValue has Ref for reference pointers in the Dx Serializer format

§When to Use DxValue

Choose DxValue when:

  • Performance is critical: Binary format parses faster than text
  • Zero-copy is needed: Large datasets can be memory-mapped
  • Type precision matters: Separate Int/Float types preserve precision
  • Building runtime structures: Objects and Tables provide efficient access

§Examples

§Creating Values

use serializer::DxValue;

// Primitive values
let null = DxValue::Null;
let boolean = DxValue::Bool(true);
let integer = DxValue::Int(42);
let float = DxValue::Float(3.14);
let string = DxValue::String("hello".to_string());

§Working with Arrays

use serializer::{DxValue, DxArray};

let mut arr = DxArray::new();
arr.values.push(DxValue::Int(1));
arr.values.push(DxValue::Int(2));
arr.values.push(DxValue::Int(3));

let array_value = DxValue::Array(arr);

§Working with Objects

use serializer::{DxValue, DxObject};

let mut obj = DxObject::new();
obj.insert("name".to_string(), DxValue::String("Alice".to_string()));
obj.insert("age".to_string(), DxValue::Int(30));

let object_value = DxValue::Object(obj);

§Type Inspection

use serializer::DxValue;

let value = DxValue::Int(42);
assert_eq!(value.type_name(), "int");
assert_eq!(value.as_int(), Some(42));

§Thread Safety

DxValue implements Send + Sync and can be safely shared between threads. This is verified at compile time via static assertions.

§See Also

Variants§

§

Null

Null value, represented as ~ in DX format.

§

Bool(bool)

Boolean value, represented as + (true) or - (false) in DX format.

§

Int(i64)

64-bit signed integer.

Note: DxLlmValue uses a single Num variant for all numbers since LLMs don’t distinguish integer vs float.

§

Float(f64)

64-bit floating-point number.

Note: DxLlmValue uses a single Num variant for all numbers since LLMs don’t distinguish integer vs float.

§

String(String)

String value. In machine format, strings don’t require quotes.

§

Array(DxArray)

Array/List of values. See DxArray for details.

§

Object(DxObject)

Object/Map with key-value pairs. See DxObject for details.

§

Table(DxTable)

Table with schema-defined columns. See DxTable for details.

Tables are a DX-specific feature for efficient tabular data representation.

§

Ref(usize)

Reference to an anchor by index (@N in DX format).

Anchors allow deduplication of repeated values in the document.

Implementations§

Source§

impl DxValue

Source

pub fn is_empty(&self) -> bool

Check if this value is “empty” for ditto logic

Source

pub fn type_name(&self) -> &'static str

Get type name for error messages

Source

pub fn as_bool(&self) -> Option<bool>

Convert to boolean if possible

Source

pub fn as_int(&self) -> Option<i64>

Convert to integer if possible

Source

pub fn as_float(&self) -> Option<f64>

Convert to float if possible

Source

pub fn as_str(&self) -> Option<&str>

Convert to string if possible

Trait Implementations§

Source§

impl Clone for DxValue

Source§

fn clone(&self) -> DxValue

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DxValue

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for DxValue

Source§

fn eq(&self, other: &DxValue) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for DxValue

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> ArchivePointee for T

Source§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
Source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> LayoutRaw for T

Source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
Source§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

Source§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
Source§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The metadata type for pointers and references to this type.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.