pub struct TopicId { /* private fields */ }Implementations§
Source§impl TopicId
impl TopicId
Sourcepub fn new(raw: String) -> Self
pub fn new(raw: String) -> Self
Examples found in repository?
examples/e2e_test.rs (line 32)
11async fn main() -> Result<()> {
12 // Generate a new random secret key
13 let secret_key = SecretKey::generate(rand::rngs::OsRng);
14
15 // Set up endpoint with discovery enabled
16 let endpoint = Endpoint::builder()
17 .secret_key(secret_key)
18 .discovery_n0()
19 .bind()
20 .await?;
21
22 // Initialize gossip with auto-discovery
23 let gossip = Gossip::builder()
24 .spawn_with_auto_discovery::<DefaultSecretRotation>(endpoint.clone(), None)
25 .await?;
26
27 // Set up protocol router
28 let _router = iroh::protocol::Router::builder(endpoint.clone())
29 .accept(iroh_gossip::ALPN, gossip.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 // Split into sink (sending) and stream (receiving)
36 gossip
37 .subscribe_and_join_with_auto_discovery(topic_id, &initial_secret)
38 .await?;
39
40 // print "[joined topic]" to stdout in success case
41 println!("[joined topic]");
42
43 // successfully joined
44 // exit with code 0
45 Ok(())
46}More examples
examples/secret_rotation.rs (line 60)
39async fn main() -> Result<()> {
40 // Generate a new random secret key
41 let secret_key = SecretKey::generate(rand::rngs::OsRng);
42
43 // Set up endpoint with discovery enabled
44 let endpoint = Endpoint::builder()
45 .secret_key(secret_key)
46 .discovery_n0()
47 .bind()
48 .await?;
49
50 // Initialize gossip with auto-discovery
51 let gossip = Gossip::builder()
52 .spawn_with_auto_discovery::<MySecretRotation>(endpoint.clone(), None)
53 .await?;
54
55 // Set up protocol router
56 let _router = iroh::protocol::Router::builder(endpoint.clone())
57 .accept(iroh_gossip::ALPN, gossip.gossip.clone())
58 .spawn();
59
60 let topic_id = TopicId::new("my-iroh-gossip-topic".to_string());
61 let initial_secret = b"my-initial-secret".to_vec();
62
63 // Split into sink (sending) and stream (receiving)
64 let (sink, mut stream) = gossip
65 .subscribe_and_join_with_auto_discovery(topic_id, &initial_secret)
66 .await?
67 .split();
68
69 println!("Joined topic");
70
71 // Spawn listener for incoming messages
72 tokio::spawn(async move {
73 while let Ok(event) = stream.recv().await {
74 if let Event::Received(msg) = event {
75 println!(
76 "\nMessage from {}: {}",
77 &msg.delivered_from.to_string()[0..8],
78 String::from_utf8(msg.content.to_vec()).unwrap()
79 );
80 } else if let Event::NeighborUp(peer) = event {
81 println!("\nJoined by {}", &peer.to_string()[0..8]);
82 }
83 }
84 });
85
86 // Main input loop for sending messages
87 let mut buffer = String::new();
88 let stdin = std::io::stdin();
89 loop {
90 print!("\n> ");
91 stdin.read_line(&mut buffer).unwrap();
92 sink.broadcast(buffer.clone().replace("\n", "").into())
93 .await
94 .unwrap();
95 print!(" - (sent)\n");
96 buffer.clear();
97 }
98}examples/chat.rs (line 32)
11async fn main() -> Result<()> {
12 // Generate a new random secret key
13 let secret_key = SecretKey::generate(rand::rngs::OsRng);
14
15 // Set up endpoint with discovery enabled
16 let endpoint = Endpoint::builder()
17 .secret_key(secret_key)
18 .discovery_n0()
19 .bind()
20 .await?;
21
22 // Initialize gossip with auto-discovery
23 let gossip = Gossip::builder()
24 .spawn_with_auto_discovery::<DefaultSecretRotation>(endpoint.clone(), None)
25 .await?;
26
27 // Set up protocol router
28 let _router = iroh::protocol::Router::builder(endpoint.clone())
29 .accept(iroh_gossip::ALPN, gossip.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 // Split into sink (sending) and stream (receiving)
36 let (sink, mut stream) = gossip
37 .subscribe_and_join_with_auto_discovery(topic_id, &initial_secret)
38 .await?
39 .split();
40
41 println!("Joined topic");
42
43 // Spawn listener for incoming messages
44 tokio::spawn(async move {
45 while let Ok(event) = stream.recv().await {
46 if let Event::Received(msg) = event {
47 println!(
48 "\nMessage from {}: {}",
49 &msg.delivered_from.to_string()[0..8],
50 String::from_utf8(msg.content.to_vec()).unwrap()
51 );
52 } else if let Event::NeighborUp(peer) = event {
53 println!("\nJoined by {}", &peer.to_string()[0..8]);
54 }
55 }
56 });
57
58 // Main input loop for sending messages
59 let mut buffer = String::new();
60 let stdin = std::io::stdin();
61 loop {
62 print!("\n> ");
63 stdin.read_line(&mut buffer).unwrap();
64 sink.broadcast(buffer.clone().replace("\n", "").into())
65 .await
66 .unwrap();
67 print!(" - (sent)\n");
68 buffer.clear();
69 }
70}Trait Implementations§
Auto Trait Implementations§
impl Freeze for TopicId
impl RefUnwindSafe for TopicId
impl Send for TopicId
impl Sync for TopicId
impl Unpin for TopicId
impl UnwindSafe for TopicId
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more