restep

Crates.iorestep
lib.rsrestep
version0.3.0
sourcesrc
created_at2022-08-15 03:40:49.052039
updated_at2022-08-16 07:42:14.55976
descriptionSimple and useful REST API endpoint generator
homepage
repositoryhttps://github.com/k-fujino-kohei/restep
max_upload_size
id645672
size12,966
Kohei Fujino (k-fujino-kohei)

documentation

README

Crates.io Docs.rs

restep

Restep can create highly readable APIClient.

Usage

Automatically generates the endpoint() function that returns the specified endpoint.

Basic

use restep::endpoint;

#[endpoint("/customers")]
fn simple() -> String {
    // You can use `fn endpoint() -> String` in this function.
    endpoint()
}
assert_eq!(simple(), "/customers");

Path Parameters

use restep::endpoint;

struct PathParameters {
    customer_id: i32,
}

#[endpoint("/customers/{customer_id}", params = "PathParameters")]
fn dynamic_route() -> String {
    let params = PathParameters { customer_id: 1 };
    // You can use `fn endpoint(params: &PathParameters) -> String` in this function.
    endpoint(&params)
}
assert_eq!(dynamic_route(), "/customers/1");

impl

use restep::endpoint;

struct APIClient;

// Also You can change the function name.
#[endpoint("/customers", name = "__endpoint")]
impl APIClient {
    pub fn path() -> String {
        Self::__endpoint()
    }
}

assert_eq!(APIClient::path(), "/customers");

Examples

RealWorld

use restep::endpoint;

#[derive(serde::Deserialize)]
struct Customer {
    id: i32,
    name: String,
}

struct APIClient {
    client: reqwest::Client,
}

struct PathParameters {
    customer_id: i32,
}

impl APIClient {
    #[endpoint("/customer/{customer_id}", params = "PathParameters")]
    async fn get_customer(&self, params: PathParameters) -> anyhow::Result<Customer> {
        let url = format!("{}{}", std::env::var("BASE_URL").unwrap(), endpoint(&params));
        let customer = self.client
            .get(url)
            .send()
            .await?
            .json()
            .await?;
        Ok(customer)
    }
}
Commit count: 13

cargo fmt