Macro api_client::api

source ·
macro_rules! api {
    () => { ... };
    ($(#[$attr:meta])* $vis:vis struct $ident:ident) => { ... };
    ($(#[$attr:meta])* $vis:vis fn $ident:ident(request: Json<$req:ty>$(, $name:ident: $ty:ty)*) -> StatusCode { $method:tt $url:literal $($headername:tt: $headervalue:expr)* } $($rest:tt)*) => { ... };
    ($(#[$attr:meta])* $vis:vis fn $ident:ident(request: Json<$req:ty>$(, $name:ident: $ty:ty)*) -> String { $method:tt $url:literal $($headername:tt: $headervalue:expr)* } $($rest:tt)*) => { ... };
    ($(#[$attr:meta])* $vis:vis fn $ident:ident(request: Json<$req:ty>$(, $name:ident: $ty:ty)*) -> Bytes { $method:tt $url:literal $($headername:tt: $headervalue:expr)* } $($rest:tt)*) => { ... };
    ($(#[$attr:meta])* $vis:vis fn $ident:ident(request: Json<$req:ty>$(, $name:ident: $ty:ty)*) -> Json<$res:ty> { $method:tt $url:literal $($headername:tt: $headervalue:expr)* } $($rest:tt)*) => { ... };
    ($(#[$attr:meta])* $vis:vis fn $ident:ident(request: Form<$req:ty>$(, $name:ident: $ty:ty)*) -> StatusCode { $method:tt $url:literal $($headername:tt: $headervalue:expr)* } $($rest:tt)*) => { ... };
    ($(#[$attr:meta])* $vis:vis fn $ident:ident(request: Form<$req:ty>$(, $name:ident: $ty:ty)*) -> String { $method:tt $url:literal $($headername:tt: $headervalue:expr)* } $($rest:tt)*) => { ... };
    ($(#[$attr:meta])* $vis:vis fn $ident:ident(request: Form<$req:ty>$(, $name:ident: $ty:ty)*) -> Bytes { $method:tt $url:literal $($headername:tt: $headervalue:expr)* } $($rest:tt)*) => { ... };
    ($(#[$attr:meta])* $vis:vis fn $ident:ident(request: Form<$req:ty>$(, $name:ident: $ty:ty)*) -> Json<$res:ty> { $method:tt $url:literal $($headername:tt: $headervalue:expr)* } $($rest:tt)*) => { ... };
    ($(#[$attr:meta])* $vis:vis fn $ident:ident($($name:ident: $ty:ty),*) -> StatusCode { $method:tt $url:literal $($headername:tt: $headervalue:expr)* } $($rest:tt)*) => { ... };
    ($(#[$attr:meta])* $vis:vis fn $ident:ident($($name:ident: $ty:ty),*) -> String { $method:tt $url:literal $($headername:tt: $headervalue:expr)* } $($rest:tt)*) => { ... };
    ($(#[$attr:meta])* $vis:vis fn $ident:ident($($name:ident: $ty:ty),*) -> Bytes { $method:tt $url:literal $($headername:tt: $headervalue:expr)* } $($rest:tt)*) => { ... };
    ($(#[$attr:meta])* $vis:vis fn $ident:ident($($name:ident: $ty:ty),*) -> Json<$res:ty> { $method:ident $url:literal $($headername:tt: $headervalue:expr)* } $($rest:tt)*) => { ... };
}
Expand description

Magic macro for API structs.

Simple Usage (auto generated struct)

use api_client::{api, Api};
use reqwest::{Client, RequestBuilder};

api!(pub struct ExampleApi);

impl ExampleApi {
    api! {
        fn example() -> String {
           GET "https://example.com"
        }
    }
}

Advanced Usage (manually created struct and Api implementation)

use api_client::{api, Api};
use reqwest::{Client, RequestBuilder};

struct ExampleApi {
    client: Client,
    username: String,
    password: String
}

impl Api for ExampleApi {
    fn client(&self) -> &Client {
        &self.client
    }

    fn pre_request(&self, request: RequestBuilder) -> reqwest::Result<RequestBuilder> {
        Ok(request.basic_auth(&self.username, Some(&self.password)))
    }
}

impl ExampleApi {
    api! {
        fn example() -> String {
           GET "https://example.com"
        }
    }
}