use std::{error::Error, pin::Pin, task::{Context, Poll}}; use futures::Sink; use mammut::{status_builder::Visibility, Mastodon, StatusBuilder}; pub struct MastodonPublisher { mastodon: Mastodon, } impl MastodonPublisher { pub fn new(mastodon: Mastodon) -> Self { Self { mastodon } } } 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(Visibility::Public); 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(())) } }