Skip to content

Commit

Permalink
Add more impls for Append and docs for file store magic
Browse files Browse the repository at this point in the history
  • Loading branch information
evanlinjin committed May 10, 2023
1 parent 2aa08a5 commit 935dc16
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 41 deletions.
22 changes: 22 additions & 0 deletions crates/chain/src/tx_data_traits.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use crate::collections::BTreeMap;
use crate::collections::BTreeSet;
use crate::BlockId;
use alloc::vec::Vec;
use bitcoin::{Block, OutPoint, Transaction, TxOut};

/// Trait to do something with every txout contained in a structure.
Expand Down Expand Up @@ -96,3 +97,24 @@ impl<T: Ord> Append for BTreeSet<T> {
BTreeSet::is_empty(self)
}
}

impl<T> Append for Vec<T> {
fn append(&mut self, mut other: Self) {
Vec::append(self, &mut other)
}

fn is_empty(&self) -> bool {
Vec::is_empty(self)
}
}

impl<A: Append, B: Append> Append for (A, B) {
fn append(&mut self, other: Self) {
Append::append(&mut self.0, other.0);
Append::append(&mut self.1, other.1);
}

fn is_empty(&self) -> bool {
Append::is_empty(&self.0) && Append::is_empty(&self.1)
}
}
63 changes: 22 additions & 41 deletions crates/file_store/src/store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,14 @@ where
///
/// The file must have been opened with read and write permissions.
///
/// `magic` is the expected prefixed bytes of the file. If this does not match, an error will be
/// returned.
///
/// [`File`]: std::fs::File
pub fn new(magic: &'a [u8], mut db_file: File) -> Result<Self, FileError> {
db_file.rewind()?;

let mut magic_buf = Vec::from_iter((0..).take(magic.len()));
let mut magic_buf = vec![0_u8; magic.len()];
db_file.read_exact(magic_buf.as_mut())?;

if magic_buf != magic {
Expand All @@ -71,6 +74,10 @@ where
/// Creates or loads a store from `db_path`.
///
/// If no file exists there, it will be created.
///
/// Refer to [`new`] for documentation on the `magic` input.
///
/// [`new`]: Self::new
pub fn new_from_path<P>(magic: &'a [u8], db_path: P) -> Result<Self, FileError>
where
P: AsRef<Path>,
Expand Down Expand Up @@ -170,46 +177,22 @@ mod test {
const TEST_MAGIC_BYTES: [u8; TEST_MAGIC_BYTES_LEN] =
[98, 100, 107, 102, 115, 49, 49, 49, 49, 49, 49, 49];

#[derive(
Debug,
Clone,
Copy,
PartialOrd,
Ord,
PartialEq,
Eq,
Hash,
serde::Serialize,
serde::Deserialize,
)]
enum TestKeychain {
External,
Internal,
}
// #[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
// struct TestChangeSet {
// pub changes: Vec<String>,
// }

impl core::fmt::Display for TestKeychain {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::External => write!(f, "external"),
Self::Internal => write!(f, "internal"),
}
}
}
type TestChangeSet = Vec<String>;

#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
struct TestChangeSet {
pub changes: Vec<String>,
}

impl Append for TestChangeSet {
fn append(&mut self, mut other: Self) {
self.changes.append(&mut other.changes)
}
// impl Append for TestChangeSet {
// fn append(&mut self, mut other: Self) {
// self.changes.append(&mut other.changes)
// }

fn is_empty(&self) -> bool {
self.changes.is_empty()
}
}
// fn is_empty(&self) -> bool {
// self.changes.is_empty()
// }
// }

#[derive(Debug)]
struct TestTracker;
Expand Down Expand Up @@ -248,9 +231,7 @@ mod test {
let mut data = [255_u8; 2000];
data[..TEST_MAGIC_BYTES_LEN].copy_from_slice(&TEST_MAGIC_BYTES);

let changeset = TestChangeSet {
changes: vec!["one".into(), "two".into(), "three!".into()],
};
let changeset = vec!["one".into(), "two".into(), "three!".into()];

let mut file = NamedTempFile::new().unwrap();
file.write_all(&data).expect("should write");
Expand Down

0 comments on commit 935dc16

Please sign in to comment.