use ipfrs_network::{NetworkConfig, NetworkNode, PeerStoreConfig};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt::init();
println!("=== IPFRS Low-Memory Network Node Example ===\n");
let config = NetworkConfig::low_memory();
println!("Low-Memory Configuration:");
println!(" Max connections: {:?}", config.max_connections);
println!(" Max inbound: {:?}", config.max_inbound_connections);
println!(" Max outbound: {:?}", config.max_outbound_connections);
println!(" Buffer size: {} bytes", config.connection_buffer_size);
println!(" Low-memory mode: {}", config.low_memory_mode);
println!(
" DHT replication factor: {}",
config.kademlia.replication_factor
);
println!(" DHT k-bucket size: {}", config.kademlia.kbucket_size);
println!();
let peer_config = PeerStoreConfig::low_memory();
println!("Peer Store Configuration:");
println!(" Max peers: {}", peer_config.max_peers);
println!(
" Max addresses per peer: {}",
peer_config.max_addrs_per_peer
);
println!(" Max latency samples: {}", peer_config.max_latency_samples);
println!(
" Max protocols per peer: {}",
peer_config.max_protocols_per_peer
);
println!();
println!("Starting network node...");
let mut node = NetworkNode::new(config)?;
node.start().await?;
println!("Node started successfully!");
println!("Peer ID: {}", node.peer_id());
println!();
let health = node.get_network_health();
println!("Network Health:");
println!(" Status: {:?}", health.status);
println!(" Connected peers: {}", health.connected_peers);
println!(" Publicly reachable: {}", health.is_publicly_reachable);
println!();
let stats = node.stats();
println!("Network Statistics:");
println!(" Connected peers: {}", stats.connected_peers);
println!(" Bytes sent: {}", stats.bytes_sent);
println!(" Bytes received: {}", stats.bytes_received);
println!();
println!("Node is running with minimal memory footprint!");
println!("Press Ctrl+C to stop...");
tokio::signal::ctrl_c().await?;
println!("\nShutting down...");
Ok(())
}