use crate::{Error, Payload, Result};
use reqwest::{blocking::Client, Url};
#[derive(Debug, Clone)]
pub struct Slack {
hook: Url,
client: Client,
}
impl Slack {
pub fn new<T: reqwest::IntoUrl>(hook: T) -> Result<Slack> {
Self::new_with_client(hook, Client::new())
}
pub fn new_with_client<T: reqwest::IntoUrl>(hook: T, client: Client) -> Result<Self> {
let hook = hook.into_url()?;
Ok(Self { hook, client })
}
pub fn send(&self, payload: &Payload) -> Result<()> {
let response = self.client.post(self.hook.clone()).json(payload).send()?;
if response.status().is_success() {
Ok(())
} else {
Err(Error::Slack(format!("HTTP error {}", response.status())))
}
}
}