summaryrefslogtreecommitdiff
path: root/src/http/teawie.rs
blob: 368fad5deea90a5a214d66f19d2eb495f19a1449 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use eyre::{bail, OptionExt, Result};
use serde::{Deserialize, Serialize};

// https://github.com/getchoo/teawieAPI
#[derive(Deserialize, Serialize)]
struct RandomTeawieResponse {
	url: Option<String>,
	error: Option<String>,
}

// TODO: read this from an env var
const TEAWIE: &str = "https://api.getchoo.com";
const RANDOM: &str = "/random_teawie";

pub async fn random<T>(http: &T) -> Result<String>
where
	T: super::Ext,
{
	let url = format!("{TEAWIE}{RANDOM}");
	let json: RandomTeawieResponse = http.get_json(&url).await?;

	if let Some(error) = json.error {
		bail!("TeawieAPI reported error: {error}");
	};

	json.url
		.ok_or_eyre("TeawieAPI didn't return an error or URL???")
}