From 4831ae815f26170174545ae87e9fe960bfce5b8c Mon Sep 17 00:00:00 2001 From: Determinant Date: Tue, 9 Jun 2020 23:19:11 -0400 Subject: ... --- examples/demo1.rs | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 examples/demo1.rs (limited to 'examples/demo1.rs') diff --git a/examples/demo1.rs b/examples/demo1.rs new file mode 100644 index 0000000..0f50ec3 --- /dev/null +++ b/examples/demo1.rs @@ -0,0 +1,56 @@ +use growthring::{WALFile, WALStore, WALPos, WALBytes, WALLoader, WALWriter}; + +struct WALFileFake { + filename: String +} + +impl WALFile for WALFileFake { + fn allocate(&self, offset: WALPos, length: usize) { + println!("{}.allocate(offset=0x{:x}, end=0x{:x})", self.filename, offset, offset + length as u64); + } + fn write(&self, offset: WALPos, data: WALBytes) { + println!("{}.write(offset=0x{:x}, end=0x{:x}, data=0x{})", self.filename, offset, offset + data.len() as u64, hex::encode(data)); + } + fn read(&self, offset: WALPos, length: usize) -> WALBytes { + Vec::new().into_boxed_slice() + } +} + +struct WALStoreFake; +impl WALStore for WALStoreFake { + fn open_file(&self, filename: &str, touch: bool) -> Option> { + println!("open_file(filename={}, touch={}", filename, touch); + let filename = filename.to_string(); + Some(Box::new(WALFileFake{ filename })) + } + fn remove_file(&self, filename: &str) -> bool { + println!("remove_file(filename={})", filename); + true + } + fn enumerate_files(&self) -> Box<[String]> { + println!("enumerate_files()"); + Vec::new().into_boxed_slice() + } + fn apply_payload(&self, payload: WALBytes) { + println!("apply_payload(payload=0x{})", hex::encode(payload)) + } +} + +fn test(records: Vec, wal: &mut WALWriter) { + let records: Vec = records.into_iter().map(|s| s.into_bytes().into_boxed_slice()).collect(); + let ret = wal.grow(&records); + for ring_id in ret.iter() { + println!("got ring id: {:?}", ring_id); + } +} + +fn main() { + let store = WALStoreFake; + let mut wal = WALLoader::new(store, 9, 8, 1000).recover(); + for _ in 0..3 { + test(["hi", "hello", "lol"].iter().map(|s| s.to_string()).collect::>(), &mut wal) + } + for _ in 0..3 { + test(["a".repeat(10), "b".repeat(100), "c".repeat(1000)].iter().map(|s| s.to_string()).collect::>(), &mut wal) + } +} -- cgit v1.2.3