Reorganize bel impl

This commit is contained in:
Stuart Axelbrooke 2025-09-15 12:28:18 -07:00
parent 2edfe90fd4
commit 526b826091

View file

@ -1,7 +1,7 @@
use crate::data_build_event::Event; use crate::data_build_event::Event;
use crate::{BuildState, DataBuildEvent, WantDetail}; use crate::{BuildState, DataBuildEvent, WantDetail};
use prost::Message; use prost::Message;
use rusqlite::{Connection, Result as SqliteResult}; use rusqlite::Connection;
use std::error::Error; use std::error::Error;
use std::sync::{Arc, RwLock}; use std::sync::{Arc, RwLock};
use std::time::{SystemTime, UNIX_EPOCH}; use std::time::{SystemTime, UNIX_EPOCH};
@ -15,6 +15,43 @@ trait BELStorage {
) -> Result<Vec<DataBuildEvent>, Box<dyn Error>>; ) -> Result<Vec<DataBuildEvent>, Box<dyn Error>>;
} }
struct MemoryBELStorage {
events: Vec<DataBuildEvent>,
}
impl MemoryBELStorage {
fn create() -> MemoryBELStorage {
MemoryBELStorage { events: vec![] }
}
}
impl BELStorage for MemoryBELStorage {
fn append_event(&mut self, event: Event) -> Result<u64, Box<dyn Error>> {
let now = SystemTime::now();
let duration_since_epoch = now.duration_since(UNIX_EPOCH).expect("Time went backwards");
let timestamp = duration_since_epoch.as_nanos() as u64;
let dbe = DataBuildEvent {
timestamp,
event_id: self.events.len() as u64,
event: Some(event),
};
self.events.push(dbe);
Ok(self.events.len() as u64)
}
fn list_events(
&self,
since_idx: u64,
limit: u64,
) -> Result<Vec<DataBuildEvent>, Box<dyn Error>> {
Ok(self.events.iter().cloned().filter(|e| e.timestamp > since_idx)
.take(limit as usize)
.collect())
}
}
struct SqliteBELStorage { struct SqliteBELStorage {
connection: Connection, connection: Connection,
} }
@ -149,48 +186,9 @@ impl<B: BELStorage> BuildEventLog<B> {
} }
mod tests { mod tests {
use crate::build_event_log::{BELStorage, BuildEventLog, SqliteBELStorage}; use crate::build_event_log::{BELStorage, BuildEventLog, MemoryBELStorage, SqliteBELStorage};
use crate::data_build_event::Event; use crate::data_build_event::Event;
use crate::{DataBuildEvent, PartitionRef, WantCreateEventV1}; use crate::{PartitionRef, WantCreateEventV1};
use std::error::Error;
use std::time::{SystemTime, UNIX_EPOCH};
struct TestBELStorage {
events: Vec<DataBuildEvent>,
}
impl TestBELStorage {
fn create() -> TestBELStorage {
TestBELStorage { events: vec![] }
}
}
impl BELStorage for TestBELStorage {
fn append_event(&mut self, event: Event) -> Result<u64, Box<dyn Error>> {
let now = SystemTime::now();
let duration_since_epoch = now.duration_since(UNIX_EPOCH).expect("Time went backwards");
let timestamp = duration_since_epoch.as_nanos() as u64;
let dbe = DataBuildEvent {
timestamp,
event_id: self.events.len() as u64,
event: Some(event),
};
self.events.push(dbe);
Ok(self.events.len() as u64)
}
fn list_events(
&self,
since_idx: u64,
limit: u64,
) -> Result<Vec<DataBuildEvent>, Box<dyn Error>> {
Ok(self.events.iter().cloned().filter(|e| e.timestamp > since_idx)
.take(limit as usize)
.collect())
}
}
#[test] #[test]
fn test_hello() { fn test_hello() {
@ -199,7 +197,7 @@ mod tests {
#[test] #[test]
fn test_append_event() { fn test_append_event() {
let storage = TestBELStorage::create(); let storage = MemoryBELStorage::create();
let mut log = BuildEventLog::create(storage); let mut log = BuildEventLog::create(storage);
// Initial state // Initial state
assert_eq!(log.storage.events.len(), 0); assert_eq!(log.storage.events.len(), 0);