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:
DxValuehas separateIntandFloatvariants for type precisionDxLlmValuehas a singleNumvariant since LLMs don’t distinguishDxValuehasObjectandTablefor structured dataDxLlmValuehasReffor 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/Floattypes 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
DxLlmValue- Value type for the LLM text formatDxArray- Array container typeDxObject- Object/map container typeDxTable- Schema-defined table type
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§
Trait Implementations§
impl StructuralPartialEq for DxValue
Auto Trait Implementations§
impl Freeze for DxValue
impl RefUnwindSafe for DxValue
impl Send for DxValue
impl Sync for DxValue
impl Unpin for DxValue
impl UnsafeUnpin for DxValue
impl UnwindSafe for DxValue
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.