diff options
| author | seth <[email protected]> | 2024-08-09 23:35:41 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-08-09 23:35:41 -0400 |
| commit | b643a6a235b0c1c9902b97421f24eff2b0d0a5ac (patch) | |
| tree | 350794c0e9330fb77367838313bc6bb97278a0aa /src/http/mod.rs | |
| parent | 372780546b508684839916e5ad54c9e90456a94f (diff) | |
tree-wide: end of summer cleanup (#214)
* api: refactor & rename module to http
* client: split from main.rs
* tree-wide: use eyre::Report as error
* nix: alejandra -> nixfmt
* nix: start using treefmt-nix
* nix: simplify flake
* nix: refactor derivation & docker image
* nix: remove overlay
* ci: update & cleanup workflows
* commands: assign all commands automatically
* commands/copypasta: remove
* http/teawie: update response struct for upstream rust rewrite
* handlers: rename modules to events; flatten
* crates: rename self to teawie-bot
* nix: fenix -> rust-overlay
i want a specific rust version grrrrrrr
* ci: pin rust to 1.79
this is what our nix dev shell uses and what we can compile on. it seems
the time crate doesn't like v1.80 of the compiler :(
* ci: always run release gates
* nix: fix static toolchain
* nix: rust-overlay -> nixpkgs
* ci: adopt actions-rust-lang actions
* nix: use docker arch names for containers
* crates/time: 0.3.30 -> 0.3.36
fixes building on rust 1.80.0
Diffstat (limited to 'src/http/mod.rs')
| -rw-r--r-- | src/http/mod.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/http/mod.rs b/src/http/mod.rs new file mode 100644 index 0000000..0f16852 --- /dev/null +++ b/src/http/mod.rs @@ -0,0 +1,43 @@ +use eyre::Result; +use log::trace; +use serde::de::DeserializeOwned; + +pub mod shiggy; +pub mod teawie; + +pub type Client = reqwest::Client; +pub type Response = reqwest::Response; + +/// Primary extensions for HTTP Client +pub trait Ext { + async fn get_request(&self, url: &str) -> Result<Response>; + async fn get_json<T: DeserializeOwned>(&self, url: &str) -> Result<T>; + fn default() -> Self; +} + +impl Ext for Client { + fn default() -> Self { + reqwest::ClientBuilder::new() + .user_agent(format!( + "teawie-bot/{}", + option_env!("CARGO_PKG_VERSION").unwrap_or("development") + )) + .build() + .unwrap() + } + + async fn get_request(&self, url: &str) -> Result<Response> { + trace!("Making request to {url}"); + let resp = self.get(url).send().await?; + resp.error_for_status_ref()?; + + Ok(resp) + } + + async fn get_json<T: DeserializeOwned>(&self, url: &str) -> Result<T> { + let resp = self.get_request(url).await?; + let json = resp.json().await?; + + Ok(json) + } +} |
