distributed_topic_tracker/
lib.rs

1mod 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}