1pub mod blockstore;
9pub mod blockstore_with_bitswap;
10pub mod datastore;
11pub mod helia;
12pub mod libp2p_behaviour;
13pub mod logger;
14pub mod metrics;
15
16#[cfg(test)]
17mod blockstore_tests;
18
19#[cfg(test)]
20mod pins_tests;
21
22use std::sync::Arc;
23
24pub use blockstore::SledBlockstore;
25pub use blockstore_with_bitswap::BlockstoreWithBitswap;
26pub use datastore::SledDatastore;
27pub use helia::{DummyRouting, HeliaImpl, SimplePins};
28pub use libp2p_behaviour::{create_swarm, create_swarm_with_keypair, HeliaBehaviour};
29pub use logger::TracingLogger;
30pub use metrics::SimpleMetrics;
31
32use libp2p::Swarm;
33use tokio::sync::Mutex;
34
35pub use helia_interface::*;
37
38pub struct HeliaConfig {
40 pub libp2p: Option<Arc<Mutex<Swarm<HeliaBehaviour>>>>,
42 pub datastore: DatastoreConfig,
44 pub blockstore: BlockstoreConfig,
46 pub dns: Option<trust_dns_resolver::TokioAsyncResolver>,
48 pub logger: LoggerConfig,
50 pub metrics: Option<Arc<dyn Metrics>>,
52}
53
54impl std::fmt::Debug for HeliaConfig {
55 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
56 f.debug_struct("HeliaConfig")
57 .field("libp2p", &self.libp2p.as_ref().map(|_| "Some(Swarm)"))
58 .field("datastore", &self.datastore)
59 .field("blockstore", &self.blockstore)
60 .field("dns", &self.dns.as_ref().map(|_| "Some(resolver)"))
61 .field("logger", &self.logger)
62 .field("metrics", &self.metrics.as_ref().map(|_| "Some(metrics)"))
63 .finish()
64 }
65}
66
67impl Default for HeliaConfig {
68 fn default() -> Self {
69 Self {
70 libp2p: None,
71 datastore: DatastoreConfig::default(),
72 blockstore: BlockstoreConfig::default(),
73 dns: None,
74 logger: LoggerConfig::default(),
75 metrics: None,
76 }
77 }
78}
79
80#[derive(Debug, Clone)]
82pub struct DatastoreConfig {
83 pub path: Option<std::path::PathBuf>,
85 pub create_if_missing: bool,
87}
88
89impl Default for DatastoreConfig {
90 fn default() -> Self {
91 Self {
92 path: None,
93 create_if_missing: true,
94 }
95 }
96}
97
98#[derive(Debug, Clone)]
100pub struct BlockstoreConfig {
101 pub path: Option<std::path::PathBuf>,
103 pub create_if_missing: bool,
105}
106
107impl Default for BlockstoreConfig {
108 fn default() -> Self {
109 Self {
110 path: None,
111 create_if_missing: true,
112 }
113 }
114}
115
116#[derive(Debug, Clone)]
118pub struct LoggerConfig {
119 pub level: tracing::Level,
121 pub include_timestamps: bool,
123}
124
125impl Default for LoggerConfig {
126 fn default() -> Self {
127 Self {
128 level: tracing::Level::INFO,
129 include_timestamps: true,
130 }
131 }
132}