distributed_topic_tracker/
lib.rs1mod actor;
2mod crypto;
3mod dht;
4mod gossip;
5mod topic;
6mod merge;
7
8#[cfg(test)]
9mod tests;
10
11pub use crypto::keys::{DefaultSecretRotation,RotationHandle,SecretRotation,signing_keypair,encryption_keypair,salt};
12pub use crypto::record::{Record,EncryptedRecord, RecordPublisher};
13pub use topic::topic::{Topic, TopicId};
14pub use gossip::sender::GossipSender;
15pub use gossip::receiver::GossipReceiver;
16pub use dht::Dht;
17
18use iroh_gossip::net::Gossip;
19use anyhow::Result;
20
21
22pub const MAX_JOIN_PEERS_COUNT: usize = 30;
23pub const MAX_BOOTSTRAP_RECORDS: usize = 10;
24
25pub trait AutoDiscoveryGossip {
26 #[allow(async_fn_in_trait)]
27 async fn subscribe_and_join_with_auto_discovery(
28 &self,
29 record_publisher: RecordPublisher,
30 ) -> Result<Topic>;
31
32 #[allow(async_fn_in_trait)]
33 async fn subscribe_and_join_with_auto_discovery_no_wait(
34 &self,
35 record_publisher: RecordPublisher,
36 ) -> Result<Topic>;
37}
38
39impl AutoDiscoveryGossip for Gossip {
40 async fn subscribe_and_join_with_auto_discovery(
41 &self,
42 record_publisher: RecordPublisher,
43 ) -> Result<Topic> {
44 Topic::new(
45 record_publisher,
46 self.clone(),
47 false,
48 )
49 .await
50 }
51
52 async fn subscribe_and_join_with_auto_discovery_no_wait(
53 &self,
54 record_publisher: RecordPublisher,
55 ) -> Result<Topic> {
56 Topic::new(
57 record_publisher,
58 self.clone(),
59 true,
60 )
61 .await
62 }
63}
64
65pub fn unix_minute(minute_offset: i64) -> u64 {
66 ((chrono::Utc::now().timestamp() as f64 / 60.0f64).floor() as i64 + minute_offset) as u64
67}