izzilis/src/publish/mastodon.rs

38 lines
1.0 KiB
Rust

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<String> for MastodonPublisher {
type Error = Box<dyn Error>;
fn poll_ready(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
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<Result<(), Self::Error>> {
Poll::Ready(Ok(()))
}
fn poll_close(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
Poll::Ready(Ok(()))
}
}