//! Take a reference to the root message of a thread and return a stream of all //! messages in the thread. This includes the root message and all replies. //! //! Implements the following methods: //! //! - [`Sbot::tangles_thread`] use async_std::stream::Stream; pub use kuska_ssb::api::dto::TanglesThread; use crate::{error::GolgiError, messages::SsbMessageKVT, sbot::Sbot, utils}; impl Sbot { /// Call the `tanglesThread` RPC method. Returns messages in the form /// of KVTs (Key Value Timestamp). /// /// # Example /// /// ```rust /// use async_std::stream::StreamExt; /// use golgi::{ /// Sbot, /// GolgiError, /// api::tangles::TanglesThread, /// sbot::Keystore /// }; /// /// async fn tangle() -> Result<(), GolgiError> { /// let mut sbot_client = Sbot::init(Keystore::Patchwork, None, None).await?; /// /// let msg_key = "%kmXb3MXtBJaNugcEL/Q7G40DgcAkMNTj3yhmxKHjfCM=.sha256"; /// /// let args = TanglesThread::new(msg_key).keys_values(true, true); /// let tangles_thread = sbot_client.tangles_thread(msg_id).await?; /// /// tangles_thread.for_each(|msg| { /// match msg { /// Ok(kvt) => println!("msg kvt: {:?}", kvt), /// Err(e) => eprintln!("error: {}", e), /// } /// }).await; /// /// Ok(()) /// } /// ``` pub async fn tangles_thread( &mut self, args: TanglesThread, ) -> Result>, GolgiError> { let mut sbot_connection = self.get_sbot_connection().await?; let req_id = sbot_connection .client .tangles_thread_req_send(&args) .await?; let thread_stream = utils::get_source_stream(sbot_connection.rpc_reader, req_id, utils::kvt_res_parse) .await; Ok(thread_stream) } }