diff --git a/bindings/wasm/lib.rs b/bindings/wasm/lib.rs index c100e53d6..0bf4fae5c 100644 --- a/bindings/wasm/lib.rs +++ b/bindings/wasm/lib.rs @@ -92,6 +92,11 @@ impl limbo_core::IO for PlatformIO { let random_f64 = Math_random(); (random_f64 * i64::MAX as f64) as i64 } + + fn get_current_time(&self) -> String { + let date = Date::new(); + date.toISOString() + } } #[wasm_bindgen] @@ -99,6 +104,17 @@ extern "C" { fn Math_random() -> f64; } +#[wasm_bindgen] +extern "C" { + type Date; + + #[wasm_bindgen(constructor)] + fn new() -> Date; + + #[wasm_bindgen(method, getter)] + fn toISOString(this: &Date) -> String; +} + pub struct DatabaseStorage { file: Rc, } diff --git a/core/io/darwin.rs b/core/io/darwin.rs index d60b58d21..1016e9954 100644 --- a/core/io/darwin.rs +++ b/core/io/darwin.rs @@ -110,6 +110,10 @@ impl IO for DarwinIO { getrandom::getrandom(&mut buf).unwrap(); i64::from_ne_bytes(buf) } + + fn get_current_time(&self) -> String { + chrono::Local::now().format("%Y-%m-%d %H:%M:%S").to_string() + } } enum CompletionCallback { diff --git a/core/io/generic.rs b/core/io/generic.rs index 0b68ac9b8..f3655ad31 100644 --- a/core/io/generic.rs +++ b/core/io/generic.rs @@ -30,6 +30,10 @@ impl IO for GenericIO { getrandom::getrandom(&mut buf).unwrap(); i64::from_ne_bytes(buf) } + + fn get_current_time(&self) -> String { + chrono::Local::now().format("%Y-%m-%d %H:%M:%S").to_string() + } } pub struct GenericFile { diff --git a/core/io/linux.rs b/core/io/linux.rs index 24b458bc0..48342e71b 100644 --- a/core/io/linux.rs +++ b/core/io/linux.rs @@ -111,6 +111,10 @@ impl IO for LinuxIO { getrandom::getrandom(&mut buf).unwrap(); i64::from_ne_bytes(buf) } + + fn get_current_time(&self) -> String { + chrono::Local::now().format("%Y-%m-%d %H:%M:%S").to_string() + } } pub struct LinuxFile { diff --git a/core/io/mod.rs b/core/io/mod.rs index 2eac3041e..ea4006f92 100644 --- a/core/io/mod.rs +++ b/core/io/mod.rs @@ -22,6 +22,8 @@ pub trait IO { fn run_once(&self) -> Result<()>; fn generate_random_number(&self) -> i64; + + fn get_current_time(&self) -> String; } pub type Complete = dyn Fn(Rc>); diff --git a/core/io/windows.rs b/core/io/windows.rs index 7516315ef..2916f6719 100644 --- a/core/io/windows.rs +++ b/core/io/windows.rs @@ -30,6 +30,10 @@ impl IO for WindowsIO { getrandom::getrandom(&mut buf).unwrap(); i64::from_ne_bytes(buf) } + + fn get_current_time(&self) -> String { + chrono::Local::now().format("%Y-%m-%d %H:%M:%S").to_string() + } } pub struct WindowsFile { diff --git a/simulator/main.rs b/simulator/main.rs index cde1c3eda..6e623b890 100644 --- a/simulator/main.rs +++ b/simulator/main.rs @@ -113,6 +113,10 @@ impl IO for SimulatorIO { fn generate_random_number(&self) -> i64 { self.rng.borrow_mut().next_u64() as i64 } + + fn get_current_time(&self) -> String { + "2024-01-01 00:00:00".to_string() + } } struct SimulatorFile {