46 lines
1.1 KiB
Rust
46 lines
1.1 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,
|
|
post_visibility: Visibility,
|
|
}
|
|
|
|
impl MastodonPublisher {
|
|
pub fn new(mastodon: Mastodon, vis: Visibility) -> Self {
|
|
Self {
|
|
mastodon: mastodon,
|
|
post_visibility: vis,
|
|
}
|
|
}
|
|
}
|
|
|
|
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(self.post_visibility);
|
|
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(()))
|
|
}
|
|
}
|