Skip to content

k-fujino-kohei/restep

Folders and files

NameName
Last commit message
Last commit date

Latest commit

f78bc02 · Aug 21, 2022

History

13 Commits
Aug 15, 2022
Aug 21, 2022
Aug 15, 2022
Aug 16, 2022
Aug 15, 2022
Aug 16, 2022

Repository files navigation

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)
    }
}

About

Simple and useful REST API endpoint generator

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages