@@ -213,6 +213,16 @@ impl Client {
213213 let res = r. await ??;
214214 Ok ( res)
215215 }
216+
217+ /// Delete a gossip topic.
218+ pub async fn delete_gossip_topic ( & mut self , topic : TopicId ) -> Result < ( ) > {
219+ let ( s, r) = oneshot:: channel ( ) ;
220+ self . sender
221+ . send ( ActorMessage :: DeleteTopic { topic, s } )
222+ . await ?;
223+ let res = r. await ??;
224+ Ok ( res)
225+ }
216226}
217227
218228struct Actor {
@@ -264,6 +274,10 @@ enum ActorMessage {
264274 bootstrap : Vec < NodeId > ,
265275 s : oneshot:: Sender < anyhow:: Result < ( ) > > ,
266276 } ,
277+ DeleteTopic {
278+ topic : iroh_gossip:: proto:: TopicId ,
279+ s : oneshot:: Sender < anyhow:: Result < ( ) > > ,
280+ } ,
267281}
268282
269283impl Actor {
@@ -436,6 +450,30 @@ impl Actor {
436450 } ;
437451 s. send ( response) . ok ( ) ;
438452 }
453+ ActorMessage :: DeleteTopic { topic, s } => {
454+ if let Err ( err) = self
455+ . writer
456+ . send ( ServerMessage :: DeleteTopic {
457+ topic : * topic. as_bytes ( ) ,
458+ } )
459+ . await
460+ {
461+ s. send ( Err ( err. into ( ) ) ) . ok ( ) ;
462+ return ;
463+ }
464+ let response = match self . reader . next ( ) . await {
465+ Some ( Ok ( msg) ) => match msg {
466+ ClientMessage :: DeleteTopicResponse ( None ) => Ok ( ( ) ) ,
467+ ClientMessage :: DeleteTopicResponse ( Some ( err) ) => {
468+ Err ( anyhow ! ( "delete topic failed: {}" , err) )
469+ }
470+ _ => Err ( anyhow ! ( "unexpected message from server: {:?}" , msg) ) ,
471+ } ,
472+ Some ( Err ( err) ) => Err ( anyhow ! ( "failed to receive response: {:?}" , err) ) ,
473+ None => Err ( anyhow ! ( "connection closed" ) ) ,
474+ } ;
475+ s. send ( response) . ok ( ) ;
476+ }
439477 }
440478 }
441479
0 commit comments