runtime_macro/
lib.rs

1mod expand;
2mod generate;
3mod runtime;
4
5use proc_macro::TokenStream;
6use syn::parse_macro_input;
7
8/// Generates the runtime infrastructure based on the configuration.
9///
10/// # Example
11///
12/// ```ignore
13/// warp::runtime!({
14///     wasi_http: WasiHttp,
15///     wasi_otel: DefaultOtel,
16///     wasi_blobstore: MongoDb,
17/// });
18/// ```
19#[proc_macro]
20pub fn runtime(input: TokenStream) -> TokenStream {
21    let parsed = parse_macro_input!(input as runtime::Config);
22    let generated = match generate::Generated::try_from(parsed) {
23        Ok(generated) => generated,
24        Err(e) => return e.into_compile_error().into(),
25    };
26    expand::expand(generated).into()
27}