#![allow(missing_docs)]
use rlg::utils::*;
use std::error::Error;
use tempfile::tempdir;
use tokio::fs::{self, File};
use tokio::io::AsyncWriteExt;
#[tokio::main]
pub(crate) async fn main() -> Result<(), Box<dyn Error>> {
println!("🦀 Rust Utilities Library Usage Examples 🦀\n");
sanitize_log_message_example();
file_operations_example().await?;
format_file_size_example();
parse_datetime_example()?;
println!("\n🎉 All examples completed successfully!");
Ok(())
}
fn sanitize_log_message_example() {
println!("🦀 **Log Message Sanitization Example**");
println!("---------------------------------------------");
let input = "Hello\nWorld\r\u{0007}";
let sanitized = sanitize_log_message(input);
println!(" Original: {}\n Sanitized: {}", input, sanitized);
}
async fn file_operations_example() -> Result<(), Box<dyn Error>> {
println!("\n🦀 **File Operations Example**");
println!("---------------------------------------------");
let temp_dir = tempdir()?;
let file_path = temp_dir.path().join("test.log");
println!("\n🔍 Checking if file is writable:");
if is_file_writable(&file_path).await.unwrap() {
println!(" ✅ File is writable: {}", file_path.display());
} else {
println!(
" ❌ File is not writable: {}",
file_path.display()
);
}
println!("\n✂️ Truncating file content:");
let mut file = File::create(&file_path).await?;
file.write_all(b"Hello, World!").await?;
truncate_file(&file_path, 5).await?;
let content = fs::read_to_string(&file_path).await?;
println!(" ✅ Truncated content: {}", content);
println!("\n📂 Checking if directory is writable:");
if is_directory_writable(temp_dir.path()).await.unwrap() {
println!(
" ✅ Directory is writable: {}",
temp_dir.path().display()
);
} else {
println!(
" ❌ Directory is not writable: {}",
temp_dir.path().display()
);
}
Ok(())
}
fn format_file_size_example() {
println!("\n🦀 **File Size Formatting Example**");
println!("---------------------------------------------");
let sizes = vec![1023, 1024, 1024 * 1024, 1024 * 1024 * 1024];
for size in sizes {
let formatted = format_file_size(size);
println!(
" Size: {} bytes -> Formatted: {}",
size, formatted
);
}
}
fn parse_datetime_example() -> Result<(), Box<dyn Error>> {
println!("\n🦀 **DateTime Parsing Example**");
println!("---------------------------------------------");
let valid_datetime = "2023-05-17T15:30:45Z";
let invalid_datetime = "invalid datetime";
println!("\n📅 Parsing valid datetime string:");
match parse_datetime(valid_datetime) {
Ok(_) => println!(
" ✅ Parsed valid datetime: {}",
valid_datetime
),
Err(_) => println!(
" ❌ Failed to parse valid datetime: {}",
valid_datetime
),
}
println!("\n📅 Parsing invalid datetime string:");
match parse_datetime(invalid_datetime) {
Ok(_) => println!(
" ❌ Unexpected success for invalid datetime: {}",
invalid_datetime
),
Err(_) => println!(
" ✅ Correctly failed to parse invalid datetime: {}",
invalid_datetime
),
}
Ok(())
}