without_mergers/
without_mergers.rs1use anyhow::Result;
2use ed25519_dalek::SigningKey;
3use iroh::{Endpoint, SecretKey};
4use iroh_gossip::net::Gossip;
5
6use distributed_topic_tracker::{
8 AutoDiscoveryGossip, BubbleMergeConfig, Config, MergeConfig, MessageOverlapMergeConfig,
9 RecordPublisher, TopicId,
10};
11
12#[tokio::main]
13async fn main() -> Result<()> {
14 let secret_key = SecretKey::generate();
16 let signing_key = SigningKey::from_bytes(&secret_key.to_bytes());
17
18 let endpoint = Endpoint::builder(iroh::endpoint::presets::N0)
20 .secret_key(secret_key.clone())
21 .bind()
22 .await?;
23
24 let gossip = Gossip::builder().spawn(endpoint.clone());
26
27 let _router = iroh::protocol::Router::builder(endpoint.clone())
29 .accept(iroh_gossip::ALPN, gossip.clone())
30 .spawn();
31
32 let topic_id = TopicId::new("my-iroh-gossip-topic".to_string());
33 let initial_secret = b"my-initial-secret".to_vec();
34
35 let record_publisher = RecordPublisher::new(
36 topic_id.clone(),
37 signing_key.clone(),
38 None,
39 initial_secret,
40 Config::builder()
42 .merge_config(
43 MergeConfig::builder()
44 .bubble_merge(BubbleMergeConfig::Disabled)
45 .message_overlap_merge(MessageOverlapMergeConfig::Disabled)
46 .build(),
47 )
48 .build(),
49 );
50
51 let topic = gossip
52 .subscribe_and_join_with_auto_discovery(record_publisher)
53 .await?;
54
55 println!("[joined topic]");
56
57 let (_gossip_sender, _gossip_receiver) = topic.split().await?;
60
61 Ok(())
62}