Skip to main content

edda_derive/
lib.rs

1mod context;
2mod evidence;
3mod snapshot;
4mod types;
5mod writers;
6
7pub use context::render_context;
8pub use evidence::{build_auto_evidence, last_commit_contribution, AutoEvidenceResult};
9pub use types::*;
10pub use writers::{rebuild_all, rebuild_branch};
11
12#[cfg(test)]
13pub(crate) mod test_support {
14    use edda_core::types::Event;
15    use edda_ledger::{EddaPaths, Ledger};
16    use std::sync::atomic::{AtomicU64, Ordering};
17
18    static TEST_COUNTER: AtomicU64 = AtomicU64::new(0);
19
20    pub struct TestLedger(Ledger);
21
22    impl std::ops::Deref for TestLedger {
23        type Target = Ledger;
24
25        fn deref(&self) -> &Self::Target {
26            &self.0
27        }
28    }
29
30    impl TestLedger {
31        pub fn append_event(&self, event: &Event) -> anyhow::Result<()> {
32            let mut chained = event.clone();
33            chained.parent_hash = self.0.last_event_hash()?;
34            edda_core::event::finalize_event(&mut chained)?;
35            self.0.append_event(&chained)
36        }
37    }
38
39    pub fn setup_workspace() -> (std::path::PathBuf, TestLedger) {
40        let n = TEST_COUNTER.fetch_add(1, Ordering::SeqCst);
41        let tmp = std::env::temp_dir().join(format!("edda_derive_test_{}_{n}", std::process::id()));
42        let _ = std::fs::remove_dir_all(&tmp);
43        let paths = EddaPaths::discover(&tmp);
44        edda_ledger::ledger::init_workspace(&paths).unwrap();
45        edda_ledger::ledger::init_head(&paths, "main").unwrap();
46        edda_ledger::ledger::init_branches_json(&paths, "main").unwrap();
47        let ledger = TestLedger(Ledger::open(&tmp).unwrap());
48        (tmp, ledger)
49    }
50}