use std::{ error::Error, pin::Pin, task::{Context, Poll}, }; use futures::Sink; use mammut::{status_builder::Visibility, Mastodon, StatusBuilder}; pub struct MastodonPublisher { mastodon: Mastodon, post_visibility: Visibility, } impl MastodonPublisher { pub fn new(mastodon: Mastodon, vis: Visibility) -> Self { Self { mastodon: mastodon, post_visibility: vis, } } } impl Sink for MastodonPublisher { type Error = Box; fn poll_ready(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll> { Poll::Ready(Ok(())) } fn start_send(self: Pin<&mut Self>, item: String) -> Result<(), Self::Error> { let mut post = StatusBuilder::new(item); post.visibility = Some(self.post_visibility); self.mastodon.new_status(post)?; Ok(()) } fn poll_flush(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll> { Poll::Ready(Ok(())) } fn poll_close(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll> { Poll::Ready(Ok(())) } }