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}