60 lines
1.9 KiB
Rust
60 lines
1.9 KiB
Rust
//! Return a history stream.
|
|
//!
|
|
//! Implements the following methods:
|
|
//!
|
|
//! - [`Sbot::create_history_stream`]
|
|
|
|
use async_std::stream::Stream;
|
|
pub use kuska_ssb::api::dto::CreateHistoryStreamIn as CreateHistoryStream;
|
|
|
|
use crate::{error::GolgiError, messages::SsbMessageKVT, sbot::Sbot, utils};
|
|
|
|
impl Sbot {
|
|
/// Call the `createHistoryStream` RPC method. Returns messages in the form
|
|
/// of KVTs (Key Value Timestamp).
|
|
///
|
|
/// # Example
|
|
///
|
|
/// ```rust
|
|
/// use async_std::stream::StreamExt;
|
|
/// use golgi::{
|
|
/// Sbot,
|
|
/// GolgiError,
|
|
/// sbot::Keystore,
|
|
/// api::history_stream::CreateHistoryStream
|
|
/// };
|
|
///
|
|
/// async fn history() -> Result<(), GolgiError> {
|
|
/// let mut sbot_client = Sbot::init(Keystore::Patchwork, None, None).await?;
|
|
///
|
|
/// let ssb_id = "@zqshk7o2Rpd/OaZ/MxH6xXONgonP1jH+edK9+GZb/NY=.ed25519".to_string();
|
|
///
|
|
/// let args = CreateHistoryStream::new(ssb_id);
|
|
/// let history_stream = sbot_client.create_history_stream(args).await?;
|
|
///
|
|
/// history_stream.for_each(|msg| {
|
|
/// match msg {
|
|
/// Ok(val) => println!("msg value: {:?}", val),
|
|
/// Err(e) => eprintln!("error: {}", e),
|
|
/// }
|
|
/// }).await;
|
|
///
|
|
/// Ok(())
|
|
/// }
|
|
/// ```
|
|
pub async fn create_history_stream(
|
|
&mut self,
|
|
args: CreateHistoryStream,
|
|
) -> Result<impl Stream<Item = Result<SsbMessageKVT, GolgiError>>, GolgiError> {
|
|
let mut sbot_connection = self.get_sbot_connection().await?;
|
|
let req_id = sbot_connection
|
|
.client
|
|
.create_history_stream_req_send(&args)
|
|
.await?;
|
|
let history_stream =
|
|
utils::get_source_stream(sbot_connection.rpc_reader, req_id, utils::kvt_res_parse)
|
|
.await;
|
|
Ok(history_stream)
|
|
}
|
|
}
|