use std::fs;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let db_path = "sample_with_trees.db";
if fs::metadata(db_path).is_ok() {
fs::remove_dir_all(db_path)?;
}
println!(
"Creating sample database with multiple trees at: {}",
db_path
);
let db = sled::open(db_path)?;
println!("Populating default tree with user data...");
db.insert(b"user:001", b"John Doe")?;
db.insert(b"user:002", b"Jane Smith")?;
db.insert(b"user:003", b"Bob Johnson")?;
db.insert(b"user:004", b"Alice Brown")?;
db.insert(b"user:005", b"Charlie Wilson")?;
db.insert(b"admin:root", b"System Administrator")?;
println!("Creating settings tree...");
let settings_tree = db.open_tree(b"settings")?;
settings_tree.insert(b"app.theme", b"dark")?;
settings_tree.insert(b"app.language", b"en-US")?;
settings_tree.insert(b"app.timeout", b"3600")?;
settings_tree.insert(b"ui.sidebar_width", b"250")?;
settings_tree.insert(b"ui.show_tooltips", b"true")?;
settings_tree.insert(b"security.session_timeout", b"1800")?;
settings_tree.insert(b"security.max_attempts", b"3")?;
settings_tree.insert(b"db.backup_interval", b"86400")?;
settings_tree.insert(b"logging.level", b"INFO")?;
settings_tree.insert(b"logging.file_rotation", b"daily")?;
println!("Creating sessions tree...");
let sessions_tree = db.open_tree(b"sessions")?;
sessions_tree.insert(
b"sess_abc123def456",
&br#"{"user_id": "001", "created": "2024-01-01T10:00:00Z", "ip": "192.168.1.100"}"#[..],
)?;
sessions_tree.insert(
b"sess_def456ghi789",
&br#"{"user_id": "002", "created": "2024-01-01T11:30:00Z", "ip": "192.168.1.101"}"#[..],
)?;
sessions_tree.insert(
b"sess_ghi789jkl012",
&br#"{"user_id": "003", "created": "2024-01-01T14:15:00Z", "ip": "192.168.1.102"}"#[..],
)?;
sessions_tree.insert(
b"sess_jkl012mno345",
&br#"{"user_id": "001", "created": "2024-01-01T16:45:00Z", "ip": "10.0.0.50"}"#[..],
)?;
sessions_tree.insert(
b"sess_mno345pqr678",
&br#"{"user_id": "004", "created": "2024-01-01T18:20:00Z", "ip": "172.16.0.25"}"#[..],
)?;
println!("Creating cache tree...");
let cache_tree = db.open_tree(b"cache")?;
cache_tree.insert(
b"weather:london",
&br#"{"temp": 15, "humidity": 72, "condition": "cloudy", "timestamp": 1704110400}"#[..],
)?;
cache_tree.insert(
b"weather:paris",
&br#"{"temp": 18, "humidity": 65, "condition": "sunny", "timestamp": 1704110400}"#[..],
)?;
cache_tree.insert(
b"weather:tokyo",
&br#"{"temp": 22, "humidity": 80, "condition": "rainy", "timestamp": 1704110400}"#[..],
)?;
cache_tree.insert(
b"api_response:github:user001",
&br#"{"login": "johndoe", "id": 12345, "avatar_url": "https://github.com/avatars/u/12345"}"#[..],
)?;
cache_tree.insert(b"computed:factorial:10", b"3628800")?;
cache_tree.insert(b"computed:fibonacci:20", b"6765")?;
cache_tree.insert(
b"temp:upload:file001",
&[0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A],
)?; cache_tree.insert(b"temp:processing:job123", b"in_progress")?;
println!("Creating logs tree...");
let logs_tree = db.open_tree(b"logs")?;
logs_tree.insert(b"2024-01-01T10:00:00Z", b"[INFO] Application started")?;
logs_tree.insert(
b"2024-01-01T10:00:15Z",
&b"[INFO] Database connection established"[..],
)?;
logs_tree.insert(
b"2024-01-01T10:05:30Z",
&b"[DEBUG] User 001 logged in from 192.168.1.100"[..],
)?;
logs_tree.insert(
b"2024-01-01T10:15:45Z",
&b"[WARN] High memory usage detected: 85%"[..],
)?;
logs_tree.insert(
b"2024-01-01T10:30:20Z",
&b"[ERROR] Failed to connect to external API: timeout"[..],
)?;
logs_tree.insert(
b"2024-01-01T10:45:10Z",
&b"[INFO] Backup completed successfully"[..],
)?;
logs_tree.insert(b"2024-01-01T11:00:00Z", b"[DEBUG] Cleanup task started")?;
logs_tree.insert(
b"2024-01-01T11:15:33Z",
&b"[INFO] User 002 updated profile"[..],
)?;
logs_tree.insert(
b"2024-01-01T11:30:45Z",
&b"[WARN] Disk space low: 15% remaining"[..],
)?;
logs_tree.insert(
b"2024-01-01T12:00:00Z",
&b"[INFO] Daily statistics generated"[..],
)?;
println!("Creating metrics tree...");
let metrics_tree = db.open_tree(b"metrics")?;
metrics_tree.insert(b"cpu_usage:2024-01-01T10:00", b"45.2")?;
metrics_tree.insert(b"cpu_usage:2024-01-01T10:01", b"52.1")?;
metrics_tree.insert(b"cpu_usage:2024-01-01T10:02", b"38.7")?;
metrics_tree.insert(b"memory_usage:2024-01-01T10:00", b"1024.5")?;
metrics_tree.insert(b"memory_usage:2024-01-01T10:01", b"1156.8")?;
metrics_tree.insert(b"memory_usage:2024-01-01T10:02", b"987.3")?;
metrics_tree.insert(b"request_count:total", b"15847")?;
metrics_tree.insert(b"request_count:today", b"234")?;
metrics_tree.insert(b"error_count:total", b"45")?;
metrics_tree.insert(b"error_count:today", b"2")?;
metrics_tree.insert(b"response_time:avg", b"125.4")?;
metrics_tree.insert(b"response_time:p95", b"450.2")?;
println!("Creating configuration tree...");
let config_tree = db.open_tree(b"configuration")?;
config_tree.insert(b"database.host", b"localhost")?;
config_tree.insert(b"database.port", b"5432")?;
config_tree.insert(b"database.name", b"production")?;
config_tree.insert(b"database.pool_size", b"10")?;
config_tree.insert(b"server.host", b"0.0.0.0")?;
config_tree.insert(b"server.port", b"8080")?;
config_tree.insert(b"server.workers", b"4")?;
config_tree.insert(b"redis.url", b"redis://localhost:6379")?;
config_tree.insert(b"email.smtp_server", b"smtp.example.com")?;
config_tree.insert(b"email.port", b"587")?;
config_tree.insert(b"features.new_ui", b"enabled")?;
config_tree.insert(b"features.beta_features", b"disabled")?;
println!("Creating binary data tree...");
let binary_tree = db.open_tree(b"binary_data")?;
binary_tree.insert(
b"image:png:header",
&[0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A],
)?;
binary_tree.insert(b"image:jpeg:header", &[0xFF, 0xD8, 0xFF, 0xE0])?;
binary_tree.insert(b"document:pdf:header", b"%PDF-1.4")?;
let binary_data: Vec<u8> = (0..=255).collect();
binary_tree.insert(b"data:bytes:0-255", binary_data.as_slice())?;
let encrypted_data = vec![
0x3F, 0xA2, 0x7B, 0x15, 0xC8, 0x91, 0x4E, 0x6D, 0x8A, 0x42, 0xF3, 0x7C, 0x19, 0xB5, 0x96,
0x2E,
];
binary_tree.insert(b"encrypted:sample", encrypted_data.as_slice())?;
binary_tree.insert(
b"uuid:sample1",
&b"550e8400-e29b-41d4-a716-446655440000"[..],
)?;
binary_tree.insert(
b"uuid:sample2",
&b"6ba7b810-9dad-11d1-80b4-00c04fd430c8"[..],
)?;
binary_tree.insert(b"hash:md5:sample", &b"5d41402abc4b2a76b9719d911017c592"[..])?;
binary_tree.insert(
b"hash:sha256:sample",
&b"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"[..],
)?;
println!("Creating test data tree...");
let test_tree = db.open_tree(b"test_data")?;
test_tree.insert(b"empty_value", b"")?;
test_tree.insert(b"", b"empty_key")?;
test_tree.insert(b"null_byte", &[0x00])?;
test_tree.insert(b"unicode", "Hello, δΈη! π".as_bytes())?;
test_tree.insert(
b"very_long_key_that_exceeds_normal_length_expectations_and_tests_handling_of_long_keys",
b"short_value",
)?;
test_tree.insert(b"short", &b"This is a very long value that exceeds normal expectations and tests the handling of large values in the database system. It contains multiple sentences and should help test display and formatting capabilities."[..])?;
test_tree.insert(
b"json:valid",
&br#"{"name": "Test", "value": 42, "active": true, "nested": {"key": "value"}}"#[..],
)?;
test_tree.insert(
b"json:array",
&br#"[1, 2, 3, "test", {"nested": true}]"#[..],
)?;
test_tree.insert(
b"json:malformed",
&br#"{"name": "Test", "value": 42, "missing_close""#[..],
)?;
test_tree.insert(
b"xml:sample",
&br#"<root><item id="1">Value 1</item><item id="2">Value 2</item></root>"#[..],
)?;
test_tree.insert(b"number:int", b"42")?;
test_tree.insert(b"number:float", b"3.14159")?;
test_tree.insert(b"number:scientific", b"1.23e-4")?;
test_tree.insert(b"number:hex", b"0xDEADBEEF")?;
test_tree.insert(b"number:binary", b"0b10101010")?;
println!("Flushing all data to disk...");
db.flush()?;
settings_tree.flush()?;
sessions_tree.flush()?;
cache_tree.flush()?;
logs_tree.flush()?;
metrics_tree.flush()?;
config_tree.flush()?;
binary_tree.flush()?;
test_tree.flush()?;
println!("\n=== Database Creation Summary ===");
println!("Database path: {}", db_path);
println!("Default tree entries: {}", db.len());
println!("Settings tree entries: {}", settings_tree.len());
println!("Sessions tree entries: {}", sessions_tree.len());
println!("Cache tree entries: {}", cache_tree.len());
println!("Logs tree entries: {}", logs_tree.len());
println!("Metrics tree entries: {}", metrics_tree.len());
println!("Configuration tree entries: {}", config_tree.len());
println!("Binary data tree entries: {}", binary_tree.len());
println!("Test data tree entries: {}", test_tree.len());
let total_entries = db.len()
+ settings_tree.len()
+ sessions_tree.len()
+ cache_tree.len()
+ logs_tree.len()
+ metrics_tree.len()
+ config_tree.len()
+ binary_tree.len()
+ test_tree.len();
println!("Total entries across all trees: {}", total_entries);
println!("\n=== Trees Created ===");
println!("β’ default - User data and basic entries");
println!("β’ settings - Application settings and preferences");
println!("β’ sessions - User session data with JSON structures");
println!("β’ cache - Temporary cached data and API responses");
println!("β’ logs - Application logs with timestamps");
println!("β’ metrics - Performance metrics and statistics");
println!("β’ configuration - Structured configuration parameters");
println!("β’ binary_data - Various binary formats and data types");
println!("β’ test_data - Edge cases and test scenarios");
println!("\nDatabase created successfully! You can now test sledoview with:");
println!("cargo run -- {}", db_path);
Ok(())
}