pub trait RequestHandler<'a> {
    const BASE_URL: &'static str;
    const API_KEY: Option<&'static str> = _;

    // Provided methods
    fn default_headers(&self, request_builder: RequestBuilder) -> RequestBuilder { ... }
    fn default_requestor(
        &self,
        _endpoint: &str,
        _parameters: Option<ParameterHashMap<'a>>,
        _json: Option<&str>
    ) -> RequestBuilder { ... }
    fn join_endpoints(endpoint: &str) -> String { ... }
    fn parameters<Function>(&self, function: Function) -> ParameterHashMap<'a>
       where Function: FnOnce(&mut ParameterHashMap<'a>) { ... }
    fn request<'async_trait, T>(
        request_builder: RequestBuilder
    ) -> Pin<Box<dyn Future<Output = Result<T, StatusCode>> + Send + 'async_trait>>
       where T: for<'de> Deserialize<'de> + 'async_trait { ... }
}
Expand description

A trait for handling HTTP requests.

Required Associated Constants§

source

const BASE_URL: &'static str

The base URL for the requests.

Provided Associated Constants§

source

const API_KEY: Option<&'static str> = _

The API key as string used for authentication.

Provided Methods§

source

fn default_headers(&self, request_builder: RequestBuilder) -> RequestBuilder

Modifies the provided RequestBuilder with default headers.

Arguments
  • request_builder - The RequestBuilder to modify.
Returns

The modified RequestBuilder with default headers set.

source

fn default_requestor( &self, _endpoint: &str, _parameters: Option<ParameterHashMap<'a>>, _json: Option<&str> ) -> RequestBuilder

Modifies the provided RequestBuilder with default settings for the request.

Arguments
  • endpoint - The endpoint for the request.
  • json - The JSON payload for the request.
Returns

The modified RequestBuilder with default settings applied.

source

fn join_endpoints(endpoint: &str) -> String

Joins the given endpoint with the base URL.

Arguments
  • endpoint - The endpoint to join with the base URL.
Returns

The joined URL as a String.

Example
use std::collections::HashMap;

struct MyRequestHandler;

impl<'a> RequestHandler<'a> for MyRequestHandler {
    const BASE_URL: &'static str = "https://api.example.com";

    fn make_request_url(&self, endpoint: &str) -> String {
        Self::join_endpoints(endpoint)
    }
}
source

fn parameters<Function>(&self, function: Function) -> ParameterHashMap<'a>where Function: FnOnce(&mut ParameterHashMap<'a>),

Builds the parameter hashmap using the given function.

Arguments
  • function - A closure that takes a mutable reference to a ParameterHashMap and modifies it.
Returns

The populated ParameterHashMap.

Example
use std::collections::HashMap;

struct MyRequestHandler;

impl<'a> RequestHandler<'a> for MyRequestHandler {
    const BASE_URL: &'static str = "https://api.example.com";

    fn make_parameters(&self) -> ParameterHashMap<'a> {
        self.parameters(|params| {
            params.insert("key1", Some("value1"));
            params.insert("key2", Some("value2"));
        })
    }
}
source

fn request<'async_trait, T>( request_builder: RequestBuilder ) -> Pin<Box<dyn Future<Output = Result<T, StatusCode>> + Send + 'async_trait>>where T: for<'de> Deserialize<'de> + 'async_trait,

Sends an HTTP request with the given RequestBuilder, and returns the parsed response.

Arguments
  • request_builder - The RequestBuilder containing the configured request.
Returns

A Result containing the parsed response on success, or a StatusCode on failure.

Example
use std::collections::HashMap;

struct MyRequestHandler;

#[derive(serde::Deserialize)]
struct MyResponse {
    // Define your response structure here
}

#[async_trait::async_trait]
impl<'a> RequestHandler<'a> for MyRequestHandler {
    const BASE_URL: &'static str = "https://api.example.com";

    async fn make_request<T>(&self, request_builder: RequestBuilder) -> Result<T, StatusCode>
    where
        T: for<'de> serde::Deserialize<'de>,
    {
        self.request(request_builder).await
    }
}

Implementors§