openapi-contract-macros 0.1.0

Proc-macro implementation for the openapi-contract crate. Not intended to be used directly — depend on `openapi-contract` instead.
Documentation
mod codegen;
mod spec;
mod types;

use proc_macro::TokenStream;

/// Generate Rust types from an OpenAPI spec file.
///
/// ```rust,ignore
/// openapi_contract::generate_types!("openapi-spec.json");
/// ```
#[proc_macro]
pub fn generate_types(input: TokenStream) -> TokenStream {
    codegen::generate_types_impl(input.into())
        .unwrap_or_else(|e| e.into_compile_error())
        .into()
}

/// Build a type-safe, compile-time validated API request.
///
/// ```rust,ignore
/// let profile = api!(GET "/api/auth/profile")
///     .fetch(&client).await?;
///
/// let members = api!(GET "/api/teams/{id}/members", id = &team_id)
///     .fetch(&client).await?;
///
/// let result = api!(POST "/api/teams/{id}/invite", id = &tid, body = &data)
///     .fetch(&client).await?;
/// ```
#[proc_macro]
pub fn api(input: TokenStream) -> TokenStream {
    codegen::api_impl(input.into())
        .unwrap_or_else(|e| e.into_compile_error())
        .into()
}