10 releases
0.2.1 | Apr 3, 2023 |
---|---|
0.2.0 | Apr 2, 2023 |
0.1.7 | Sep 2, 2022 |
#1565 in Encoding
90 downloads per month
23KB
356 lines
API Client
This project provides a macro for quickly creating REST api client structs in Rust.
Adding to project
[dependencies]
api-client = "0.1"
Example
mod api {
use api_client::{api, Api};
pub use models::*;
mod models {
use serde::{Deserialize, Serialize};
#[derive(Debug, PartialEq, Eq, Deserialize, Serialize)]
pub struct Todo {
#[serde(rename = "userId")]
pub user_id: u32,
pub id: u32,
pub title: String,
pub completed: bool,
}
#[derive(Debug, Serialize)]
pub struct CreateTodo {
#[serde(rename = "userId")]
pub user_id: u32,
pub title: String,
pub completed: bool,
}
#[derive(Debug, Default, Serialize)]
pub struct UpdateTodo {
#[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
pub user_id: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub completed: Option<bool>,
}
}
api!(pub struct JsonPlaceholder);
const BASE_URL: &str = "https://jsonplaceholder.typicode.com";
impl JsonPlaceholder {
pub fn new() -> Self {
Api::new()
}
api! {
pub fn todos() -> Json<Vec<Todo>> {
GET "{BASE_URL}/todos"
}
pub fn todo(id: u32) -> Json<Todo> {
GET "{BASE_URL}/todos/{id}"
}
pub fn create_todo(request: Json<CreateTodo>) -> Json<Todo> {
POST "{BASE_URL}/todos"
}
pub fn replace_todo(request: Json<Todo>, id: u32) -> Json<Todo> {
PUT "{BASE_URL}/todos/{id}"
}
pub fn update_todo(request: Json<UpdateTodo>, id: u32) -> Json<Todo> {
PATCH "{BASE_URL}/todos/{id}"
}
pub fn delete_todo(id: u32) -> StatusCode {
DELETE "{BASE_URL}/todos/{id}"
}
}
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
let json_placeholder = api::JsonPlaceholder::new();
let todo_1 = json_placeholder.todo(1).await?;
println!("{:?}", todo_1);
Ok(())
}
Dependencies
~4–16MB
~210K SLoC