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}