Grove/Common/mod.rs
1//! Common Module
2//!
3//! Provides shared utilities, traits, and error types
4//! used across the Grove codebase.
5
6#[path = "Error.rs"]
7pub mod Error;
8#[path = "Traits.rs"]
9pub mod Traits;
10
11/// Common result type for Grove operations
12pub type Result<T> = anyhow::Result<T>;
13
14/// Grove library version
15pub const VERSION:&str = env!("CARGO_PKG_VERSION");
16
17/// Default configuration values
18pub mod config {
19 /// Default timeout for operations in milliseconds
20 pub const DEFAULT_TIMEOUT_MS:u64 = 30000;
21
22 /// Default buffer size for I/O operations
23 pub const DEFAULT_BUFFER_SIZE:usize = 8192;
24
25 /// Default maximum number of retries
26 pub const DEFAULT_MAX_RETRIES:u32 = 3;
27
28 /// Default connection timeout in milliseconds
29 pub const DEFAULT_CONNECTION_TIMEOUT_MS:u64 = 5000;
30
31 /// Default heartbeat interval in seconds
32 pub const DEFAULT_HEARTBEAT_INTERVAL_SEC:u64 = 30;
33
34 /// Default maximum concurrent operations
35 pub const DEFAULT_MAX_CONCURRENT:usize = 100;
36}
37
38/// Utility functions for common operations
39pub mod utils {
40 use std::time::{SystemTime, UNIX_EPOCH};
41
42 /// Get current Unix timestamp in seconds
43 pub fn now_unix_timestamp() -> u64 { SystemTime::now().duration_since(UNIX_EPOCH).unwrap_or_default().as_secs() }
44
45 /// Get current Unix timestamp in milliseconds
46 pub fn now_unix_timestamp_ms() -> u128 {
47 SystemTime::now().duration_since(UNIX_EPOCH).unwrap_or_default().as_millis()
48 }
49
50 /// Get current Unix timestamp in microseconds
51 pub fn now_unix_timestamp_us() -> u128 {
52 SystemTime::now().duration_since(UNIX_EPOCH).unwrap_or_default().as_micros()
53 }
54
55 /// Generate a unique ID
56 pub fn generate_id() -> String { format!("{}-{}", now_unix_timestamp_ms(), uuid::Uuid::new_v4()) }
57
58 /// Sleep for the specified duration
59 pub async fn sleep_ms(ms:u64) { tokio::time::sleep(tokio::time::Duration::from_millis(ms)).await }
60
61 /// Sleep for the specified duration
62 pub async fn sleep_sec(sec:u64) { tokio::time::sleep(tokio::time::Duration::from_secs(sec)).await }
63}
64
65#[cfg(test)]
66mod tests {
67 use super::*;
68
69 #[test]
70 fn test_version() {
71 assert!(!VERSION.is_empty());
72 assert!(VERSION.contains('.'));
73 }
74
75 #[test]
76 fn test_now_unix_timestamp() {
77 let ts = utils::now_unix_timestamp();
78 assert!(ts > 0);
79 }
80
81 #[test]
82 fn test_generate_id() {
83 let id1 = utils::generate_id();
84 let id2 = utils::generate_id();
85 assert_ne!(id1, id2);
86 assert!(id1.contains('-'));
87 }
88}