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