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::{BuildState, DataBuildEvent, WantDetail};
use prost::Message;
use rusqlite::{Connection, Result as SqliteResult};
use rusqlite::Connection;
use std::error::Error;
use std::sync::{Arc, RwLock};
use std::time::{SystemTime, UNIX_EPOCH};
@ -15,6 +15,43 @@ trait BELStorage {
) -> 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 {
connection: Connection,
}
@ -149,48 +186,9 @@ impl<B: BELStorage> BuildEventLog<B> {
}
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::{DataBuildEvent, 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())
}
}
use crate::{PartitionRef, WantCreateEventV1};
#[test]
fn test_hello() {
@ -199,7 +197,7 @@ mod tests {
#[test]
fn test_append_event() {
let storage = TestBELStorage::create();
let storage = MemoryBELStorage::create();
let mut log = BuildEventLog::create(storage);
// Initial state
assert_eq!(log.storage.events.len(), 0);