DailyWikiHuman/src/mastodon.rs

68 lines
1.4 KiB
Rust

use reqwest::{blocking::{Client, multipart}, StatusCode};
#[derive(Debug)]
pub enum Error {
ReqwestError(reqwest::Error),
FailureStatus(reqwest::StatusCode)
}
impl From<reqwest::Error> for Error {
fn from(value: reqwest::Error) -> Self {
Self::ReqwestError(value)
}
}
#[derive(Copy, Clone)]
pub enum Visibility {
Public,
Unlisted,
Private,
Direct
}
impl Visibility {
pub fn enum_name(&self) -> &'static str {
match self {
Self::Public => "public",
Self::Unlisted => "unlisted",
Self::Private => "private",
Self::Direct => "direct",
}
}
}
#[derive(Clone)]
pub struct Mastodon {
instance: String,
token: String,
}
impl Mastodon {
pub fn new(instance: String, token: String) -> Self {
Mastodon {
instance,
token,
}
}
pub fn post_text_status(&self, status: String, visibility: Visibility) -> Result<(), Error> {
let form = multipart::Form::new()
.text("status", status)
.text("visibility", visibility.enum_name());
let client = reqwest::blocking::Client::builder()
.danger_accept_invalid_certs(true)
.build()
.expect("");
let response = client
.post(format!("{}/api/v1/statuses", self.instance))
.header("Authorization", format!("Bearer {}", self.token))
.multipart(form)
.send()?;
match response.status() {
StatusCode::OK => Ok(()),
s => Err(Error::FailureStatus(s))
}
}
}