vflight 0.9.2

Share files over the Veilid distributed network with content-addressable storage
Documentation
/// Example: Working with protocol messages
///
/// This example demonstrates serialization and deserialization
/// of protocol messages.
use vflight::{FileMetadata, Request, Response};

fn main() -> anyhow::Result<()> {
    // Create a metadata object
    let metadata = FileMetadata {
        name: "document.pdf".to_string(),
        size: 1_024_000,
        total_chunks: 35,
        chunk_hashes: vec![
            "hash1".to_string(),
            "hash2".to_string(),
            "hash3".to_string(),
        ],
        route_blob: "base64_encoded_route_data".to_string(),
        encryption_salt: None,
        encryption_nonce: None,
        compressed: false,
    };

    println!("Original metadata:");
    println!("  Name: {}", metadata.name);
    println!("  Size: {} bytes", metadata.size);
    println!("  Chunks: {}", metadata.total_chunks);

    // Serialize to JSON
    let json = serde_json::to_string_pretty(&metadata)?;
    println!("\nSerialized to JSON:\n{}\n", json);

    // Create protocol messages
    let request = Request::GetMetadata;
    let request_json = serde_json::to_string(&request)?;
    println!("Request message: {}", request_json);

    let response = Response::Metadata {
        name: metadata.name.clone(),
        size: metadata.size,
        total_chunks: metadata.total_chunks,
        chunk_hashes: metadata.chunk_hashes.clone(),
        compressed: metadata.compressed,
    };
    let response_json = serde_json::to_string_pretty(&response)?;
    println!("\nResponse message:\n{}", response_json);

    Ok(())
}