use serializer::{
DxDocument, DxLlmValue, DxValue, deserialize, encode, format_human, parse, serialize,
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== DX Serializer: Basic Usage ===\n");
println!("--- Part 1: Simplified API (DxDocument) ---\n");
println!("1. Creating a DxDocument");
let mut doc = DxDocument::new();
doc.context
.insert("name".to_string(), DxLlmValue::Str("MyApp".to_string()));
doc.context
.insert("version".to_string(), DxLlmValue::Str("1.0.0".to_string()));
doc.context
.insert("count".to_string(), DxLlmValue::Num(42.0));
doc.context
.insert("active".to_string(), DxLlmValue::Bool(true));
println!(" Created document with {} fields", doc.context.len());
println!("\n2. Serializing to LLM format");
let text = serialize(&doc);
println!(" Output ({} bytes):", text.len());
for line in text.lines() {
println!(" {}", line);
}
println!("\n3. Deserializing from LLM format");
let parsed = deserialize(&text)?;
println!(" Parsed {} fields:", parsed.context.len());
for (key, value) in &parsed.context {
println!(" {} = {:?}", key, value);
}
println!("\n--- Part 2: Low-Level API (DxValue) ---\n");
println!("4. Parsing key-value pairs");
let input = b"name:Alice\nage:30\nactive:+";
let data = parse(input)?;
if let DxValue::Object(obj) = &data {
println!(" Name: {}", obj.get("name").unwrap().as_str().unwrap());
println!(" Age: {}", obj.get("age").unwrap().as_int().unwrap());
println!(
" Active: {}",
obj.get("active").unwrap().as_bool().unwrap()
);
}
println!("\n5. Parsing arrays");
let input = b"colors>red|blue|green|yellow";
let data = parse(input)?;
if let DxValue::Object(obj) = &data {
if let Some(DxValue::Array(arr)) = obj.get("colors") {
print!(" Colors: ");
for elem in &arr.values {
print!("{} ", elem.as_str().unwrap());
}
println!();
}
}
println!("\n6. Encoding data");
let input = b"project:DX\ncount:42\nstatus:+";
let data = parse(input)?;
let encoded = encode(&data)?;
println!(" Original: {} bytes", input.len());
println!(" Encoded: {} bytes", encoded.len());
println!(" Content: {}", String::from_utf8_lossy(&encoded));
println!("\n7. Human-readable formatting");
let human = format_human(&data)?;
println!("{}", human);
println!("--- Part 3: Tables ---\n");
println!("8. Parsing tables with schema");
let table_input = b"users=id%i name%s score%f active%b
1 Alice 95.5 +
2 Bob 87.3 -
3 Charlie 92.0 +";
let table_data = parse(table_input)?;
let table_human = format_human(&table_data)?;
println!("{}", table_human);
println!("9. Round-trip verification");
let encoded = encode(&table_data)?;
let reparsed = parse(&encoded)?;
println!(" Round-trip successful: {}", table_data == reparsed);
println!("\n=== Example Complete ===");
Ok(())
}