grove/Common/mod.rs
1//! Common Module
2//!
3//! Provides shared utilities, traits, and error types
4//! used across the Grove codebase.
5
6pub mod error;
7pub mod traits;
8
9// Re-exports for convenience
10pub use error::{GroveError, GroveResult};
11pub use traits::{ExtensionContext, ExtensionMetadata};
12
13/// Common result type for Grove operations
14pub type Result<T> = anyhow::Result<T>;
15
16/// Grove library version
17pub const VERSION:&str = env!("CARGO_PKG_VERSION");
18
19/// Default configuration values
20pub mod config {
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 use std::time::{SystemTime, UNIX_EPOCH};
43
44 /// Get current Unix timestamp in seconds
45 pub fn now_unix_timestamp() -> u64 { SystemTime::now().duration_since(UNIX_EPOCH).unwrap_or_default().as_secs() }
46
47 /// Get current Unix timestamp in milliseconds
48 pub fn now_unix_timestamp_ms() -> u128 {
49 SystemTime::now().duration_since(UNIX_EPOCH).unwrap_or_default().as_millis()
50 }
51
52 /// Get current Unix timestamp in microseconds
53 pub fn now_unix_timestamp_us() -> u128 {
54 SystemTime::now().duration_since(UNIX_EPOCH).unwrap_or_default().as_micros()
55 }
56
57 /// Generate a unique ID
58 pub fn generate_id() -> String { format!("{}-{}", now_unix_timestamp_ms(), uuid::Uuid::new_v4()) }
59
60 /// Sleep for the specified duration
61 pub async fn sleep_ms(ms:u64) { tokio::time::sleep(tokio::time::Duration::from_millis(ms)).await }
62
63 /// Sleep for the specified duration
64 pub async fn sleep_sec(sec:u64) { tokio::time::sleep(tokio::time::Duration::from_secs(sec)).await }
65}
66
67#[cfg(test)]
68mod tests {
69 use super::*;
70
71 #[test]
72 fn test_version() {
73 assert!(!VERSION.is_empty());
74 assert!(VERSION.contains('.'));
75 }
76
77 #[test]
78 fn test_now_unix_timestamp() {
79 let ts = utils::now_unix_timestamp();
80 assert!(ts > 0);
81 }
82
83 #[test]
84 fn test_generate_id() {
85 let id1 = utils::generate_id();
86 let id2 = utils::generate_id();
87 assert_ne!(id1, id2);
88 assert!(id1.contains('-'));
89 }
90}