use std::process; use golgi::error::GolgiError; use golgi::sbot::Sbot; use async_std::stream::{StreamExt}; use futures::{pin_mut}; async fn run() -> Result<(), GolgiError> { let mut sbot_client = Sbot::init(None, None).await?; let id = sbot_client.whoami().await?; println!("{}", id); let author = "@L/z54cbc8V1kL1/MiBhpEKuN3QJkSoZYNaukny3ghIs=.ed25519"; // create a history stream let history_stream = sbot_client.create_history_stream(author.to_string()).await?; // loop through the results until the end of the stream pin_mut!(history_stream); // needed for iteration println!("looping through stream"); while let Some(res) = history_stream.next().await { match res { Ok(value) => { println!("value: {:?}", value); }, Err(err) => { println!("err: {:?}", err); } } } println!("reached end of stream"); // // create a history stream and convert it into a Vec using try_collect // // (if there is any error in the results, it will be raised) // let mut history_stream = sbot_client.create_history_stream(author.to_string()).await?; // let results : Vec = history_stream.try_collect().await?; // for x in results { // println!("x: {:?}", x); // } // // // example to create a history stream and use a map to convert stream of SsbMessageValue // // into a stream of KeyTypeTuple (local struct for storing message_key and message_type) // #[derive(Debug)] // struct KeyTypeTuple { // message_key: String, // message_type: SsbMessageContentType, // }; // let mut history_stream = sbot_client.create_history_stream(author.to_string()).await?; // let type_stream = history_stream.map(|msg| { // match msg { // Ok(val) => { // let message_type = val.get_message_type()?; // let tuple = KeyTypeTuple { // message_key: val.signature, // message_type: message_type, // }; // Ok(tuple) // } // Err(err) => { // Err(err) // } // } // }); // pin_mut!(type_stream); // needed for iteration // println!("looping through type stream"); // while let Some(res) = type_stream.next().await { // match res { // Ok(value) => { // println!("value: {:?}", value); // }, // Err(err) => { // println!("err: {:?}", err); // } // } // } // println!("reached end of type stream"); // // // return Ok Ok(()) } #[async_std::main] async fn main() { if let Err(e) = run().await { eprintln!("Application error: {}", e); process::exit(1); } }