some_random_api/endpoints/canvas/
misc.rs

1use crate::{Hex, Requester, Tweet, RGB};
2use anyhow::{Error, Result};
3
4pub struct CanvasMiscEndpoint(pub(crate) Requester);
5
6impl<'a> CanvasMiscEndpoint {
7    /// Add a bisexual flag border to your avatar
8    pub async fn bisexual<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
9        self.0
10            .request_image(
11                "canvas/misc/bisexual",
12                &[("avatar", avatar_url.to_string())],
13            )
14            .await
15    }
16
17    /// Blur your avatar
18    pub async fn blur<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
19        self.0
20            .request_image("canvas/misc/blur", &[("avatar", avatar_url.to_string())])
21            .await
22    }
23
24    /// Crop your avatar to a circle
25    pub async fn circle<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
26        self.0
27            .request_image("canvas/misc/circle", &[("avatar", avatar_url.to_string())])
28            .await
29    }
30
31    /// Generate a square image of a hex color
32    pub async fn color_viewer<T: TryInto<Hex>>(&self, hex: T) -> Result<Vec<u8>> {
33        self.0
34            .request_image(
35                "canvas/misc/colorviewer",
36                &[(
37                    "hex",
38                    hex.try_into()
39                        .map_err(|_| Error::msg("Failed to parse hex string"))?
40                        .hex,
41                )],
42            )
43            .await
44    }
45
46    /// Crop your avatar to a heart shape
47    pub async fn heart<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
48        self.0
49            .request_image("canvas/misc/heart", &[("avatar", avatar_url.to_string())])
50            .await
51    }
52
53    /// Convert RGB to hex
54    pub async fn hex<T: ToString>(&self, rgb: T) -> Result<Hex> {
55        self.0
56            .request("canvas/misc/hex", Some(&[("rgb", rgb.to_string())]))
57            .await
58    }
59
60    /// Horny card
61    pub async fn horny<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
62        self.0
63            .request_image("canvas/misc/horny", &[("avatar", avatar_url.to_string())])
64            .await
65    }
66
67    /// You are so stupid
68    pub async fn stupid<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
69        self.0
70            .request_image(
71                "canvas/misc/its-so-stupid",
72                &[("avatar", avatar_url.to_string())],
73            )
74            .await
75    }
76
77    /// Turn your avatar to a JPG
78    pub async fn jpg<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
79        self.0
80            .request_image("canvas/misc/jpg", &[("avatar", avatar_url.to_string())])
81            .await
82    }
83
84    /// Add a lesbian flag border to your avatar
85    pub async fn lesbian<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
86        self.0
87            .request_image("canvas/misc/lesbian", &[("avatar", avatar_url.to_string())])
88            .await
89    }
90
91    /// Add an LGBT flag border to your avatar
92    pub async fn lgbt<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
93        self.0
94            .request_image("canvas/misc/lgbt", &[("avatar", avatar_url.to_string())])
95            .await
96    }
97
98    /// I lied to you as naturally as idk tbh
99    pub async fn lied<T: ToString, U: ToString>(
100        &self,
101        username: T,
102        avatar_url: U,
103    ) -> Result<Vec<u8>> {
104        self.0
105            .request_image(
106                "canvas/misc/lied",
107                &[
108                    ("username", username.to_string()),
109                    ("avatar", avatar_url.to_string()),
110                ],
111            )
112            .await
113    }
114
115    /// Loli police
116    pub async fn lolice<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
117        self.0
118            .request_image("canvas/misc/lolice", &[("avatar", avatar_url.to_string())])
119            .await
120    }
121
122    /// Generate a fake Genshin Impact namecard
123    pub async fn namecard<T: ToString, U: ToString, V: ToString, W: ToString>(
124        &self,
125        username: T,
126        avatar_url: U,
127        birthday: V,
128        description: Option<W>,
129    ) -> Result<Vec<u8>> {
130        self.0
131            .request_image(
132                "canvas/misc/namecard",
133                &[
134                    ("username", username.to_string()),
135                    ("avatar", avatar_url.to_string()),
136                    ("birthday", birthday.to_string()),
137                    (
138                        "description",
139                        description.map_or("".into(), |description| description.to_string()),
140                    ),
141                ],
142            )
143            .await
144    }
145
146    /// No description?
147    pub async fn no_bitches<T: ToString>(&self, no: T) -> Result<Vec<u8>> {
148        self.0
149            .request_image("canvas/misc/nobitches", &[("no", no.to_string())])
150            .await
151    }
152
153    /// Add a non-binary flag border to your avatar
154    pub async fn non_binary<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
155        self.0
156            .request_image(
157                "canvas/misc/nonbinary",
158                &[("avatar", avatar_url.to_string())],
159            )
160            .await
161    }
162
163    /// Share Master Oogway's wisdom
164    pub async fn oogway<T: ToString>(&self, quote: T) -> Result<Vec<u8>> {
165        self.0
166            .request_image("canvas/misc/oogway", &[("quote", quote.to_string())])
167            .await
168    }
169
170    /// Share Master Oogway's wisdom (different image)
171    pub async fn oogway_2<T: ToString>(&self, quote: T) -> Result<Vec<u8>> {
172        self.0
173            .request_image("canvas/misc/oogway2", &[("quote", quote.to_string())])
174            .await
175    }
176
177    /// Add a pansexual flag border to your avatar
178    pub async fn pansexual<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
179        self.0
180            .request_image(
181                "canvas/misc/pansexual",
182                &[("avatar", avatar_url.to_string())],
183            )
184            .await
185    }
186
187    /// Pixelate your avatar
188    pub async fn pixelate<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
189        self.0
190            .request_image(
191                "canvas/misc/pixelate",
192                &[("avatar", avatar_url.to_string())],
193            )
194            .await
195    }
196
197    /// Convert hex to RGB
198    pub async fn rgb<T: TryInto<Hex, Error = Error>>(&self, hex: T) -> Result<RGB> {
199        self.0
200            .request("canvas/misc/rgb", Some(&[("hex", hex.try_into()?.hex)]))
201            .await
202    }
203
204    /// Generate a simp card
205    pub async fn simp<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
206        self.0
207            .request_image(
208                "canvas/misc/simpcard",
209                &[("avatar", avatar_url.to_string())],
210            )
211            .await
212    }
213
214    /// Generate a spinning avatar
215    pub async fn spin<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
216        self.0
217            .request_image("canvas/misc/spin", &[("avatar", avatar_url.to_string())])
218            .await
219    }
220
221    /// Put an image on a DVD disk (scene from Tonikawa)
222    pub async fn tonikawa<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
223        self.0
224            .request_image(
225                "canvas/misc/tonikawa",
226                &[("avatar", avatar_url.to_string())],
227            )
228            .await
229    }
230
231    /// Add a transgender flag border to your avatar
232    pub async fn transgender<T: ToString>(&self, avatar_url: T) -> Result<Vec<u8>> {
233        self.0
234            .request_image(
235                "canvas/misc/transgender",
236                &[("avatar", avatar_url.to_string())],
237            )
238            .await
239    }
240
241    /// Generate a fake tweet
242    pub async fn tweet(&self, tweet: Tweet) -> Result<Vec<u8>> {
243        self.0.request_image("canvas/misc/tweet", &tweet).await
244    }
245
246    /// Generate a fake youtube comment
247    pub async fn youtube_comment<T: ToString, U: ToString, V: ToString>(
248        &self,
249        username: T,
250        avatar_url: U,
251        comment: V,
252    ) -> Result<Vec<u8>> {
253        self.0
254            .request_image(
255                "canvas/misc/youtube-comment",
256                &[
257                    ("username", username.to_string()),
258                    ("avatar", avatar_url.to_string()),
259                    ("comment", comment.to_string()),
260                ],
261            )
262            .await
263    }
264}