Expand description
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(¶ms)
}
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(¶ms));
let customer = self.client
.get(url)
.send()
.await?
.json()
.await?;
Ok(customer)
}
}
Attribute Macros§
- endpoint
- Creates a function that returns the specified path.