use crate::{Hex, Requester};
use anyhow::{Error, Result};
pub struct CanvasFilterEndpoint(pub(crate) Requester);
impl<'a> CanvasFilterEndpoint {
pub async fn blue<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
self.0
.request_image("canvas/filter/blue", &[("avatar", avatar_url.to_string())])
.await
}
pub async fn blurple<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
self.0
.request_image(
"canvas/filter/blurple",
&[("avatar", avatar_url.to_string())],
)
.await
}
pub async fn blurple_2<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
self.0
.request_image(
"canvas/filter/blurple2",
&[("avatar", avatar_url.to_string())],
)
.await
}
pub async fn brightness<T: ToString>(&self, avatar_url: T, brightness: u8) -> Result<Vec<u8>> {
self.0
.request_image(
"canvas/filter/brightness",
&[
("avatar", avatar_url.to_string()),
("brightness", brightness.min(100).to_string()),
],
)
.await
}
pub async fn color<T: ToString, U: TryInto<Hex>>(
&self,
avatar_url: T,
hex: U,
) -> Result<Vec<u8>> {
self.0
.request_image(
"canvas/filter/color",
&[
("avatar", avatar_url.to_string()),
(
"color",
hex.try_into()
.map_err(|_| Error::msg("Failed to parse hex string"))?
.hex,
),
],
)
.await
}
pub async fn green<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
self.0
.request_image("canvas/filter/green", &[("avatar", avatar_url.to_string())])
.await
}
pub async fn greyscale<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
self.0
.request_image(
"canvas/filter/greyscale",
&[("avatar", avatar_url.to_string())],
)
.await
}
pub async fn invert_greyscale<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
self.0
.request_image(
"canvas/filter/invertgreyscale",
&[("avatar", avatar_url.to_string())],
)
.await
}
pub async fn red<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
self.0
.request_image("canvas/filter/red", &[("avatar", avatar_url.to_string())])
.await
}
pub async fn sepia<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
self.0
.request_image("canvas/filter/sepia", &[("avatar", avatar_url.to_string())])
.await
}
pub async fn threshold<T: ToString>(&self, avatar_url: T, threshold: u8) -> Result<Vec<u8>> {
self.0
.request_image(
"canvas/filter/threshold",
&[
("avatar", avatar_url.to_string()),
("threshold", threshold.min(100).to_string()),
],
)
.await
}
}