Skip to content

Commit 1f0a7b6

Browse files
authored
Merge pull request #10 from catusax/feat/v2
feat: add Cursor
2 parents 9f166aa + 82ad436 commit 1f0a7b6

File tree

11 files changed

+606
-242
lines changed

11 files changed

+606
-242
lines changed

Diff for: Cargo.lock

+19-81
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ tonic-build = "0.12.3"
3939

4040
[dev-dependencies]
4141
bollard = "0.18.1"
42-
tempdir = "0.3.7"
42+
tempfile = "3.16.0"
4343

4444
[profile.release]
4545
lto = true

Diff for: src/key/store.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ mod tests {
244244
use super::*;
245245
use crate::net::utils::Address;
246246
use energon::drand::schemes::DefaultScheme;
247-
use tempdir;
247+
use tempfile::tempdir;
248248

249249
// #Required permissions
250250
//
@@ -261,7 +261,7 @@ mod tests {
261261
#[test]
262262
fn check_permissions_and_data() {
263263
// Build absolute path for base folder 'testnet'
264-
let temp_dir = tempdir::TempDir::new("permission_test").unwrap();
264+
let temp_dir = tempdir().unwrap();
265265
let base_path = temp_dir
266266
.path()
267267
.join("testnet")

Diff for: src/store/memstore/cursor.rs

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
use tonic::async_trait;
2+
3+
use super::MemStore;
4+
5+
use crate::store::{Beacon, BeaconCursor, StorageError, Store};
6+
7+
pub struct MemDbCursor<'a> {
8+
pos: usize,
9+
store: &'a MemStore,
10+
}
11+
12+
impl<'a> MemDbCursor<'a> {
13+
pub fn new(store: &'a MemStore) -> Self {
14+
MemDbCursor { pos: 0, store }
15+
}
16+
}
17+
18+
#[async_trait]
19+
impl BeaconCursor for MemDbCursor<'_> {
20+
async fn first(&mut self) -> Result<Option<Beacon>, StorageError> {
21+
match self.store.first().await {
22+
Ok(beacon) => {
23+
self.pos = 0;
24+
Ok(Some(beacon))
25+
}
26+
Err(StorageError::NotFound) => Ok(None),
27+
Err(e) => Err(e),
28+
}
29+
}
30+
31+
async fn next(&mut self) -> Result<Option<Beacon>, StorageError> {
32+
match self.store.get_at_position(self.pos + 1).await {
33+
Ok(beacon) => {
34+
self.pos += 1;
35+
Ok(Some(beacon))
36+
}
37+
Err(StorageError::NotFound) => Ok(None),
38+
Err(e) => Err(e),
39+
}
40+
}
41+
42+
async fn seek(&mut self, round: u64) -> Result<Option<Beacon>, StorageError> {
43+
match self.store.get_beacon(round).await {
44+
Ok(beacon) => {
45+
self.pos = self.store.get_pos(beacon.round).await?;
46+
Ok(Some(beacon))
47+
}
48+
Err(StorageError::NotFound) => Ok(None),
49+
Err(e) => Err(e),
50+
}
51+
}
52+
53+
async fn last(&mut self) -> Result<Option<Beacon>, StorageError> {
54+
match self.store.last().await {
55+
Ok(beacon) => {
56+
self.pos = self.store.len().await? - 1;
57+
Ok(Some(beacon))
58+
}
59+
Err(StorageError::NotFound) => Ok(None),
60+
Err(e) => Err(e),
61+
}
62+
}
63+
}

0 commit comments

Comments
 (0)