Skip to main content

gpui_form_derive/
lib.rs

1//! Proc macros for deriving `gpui-form` form state and MCP submit helpers.
2
3mod derives;
4#[cfg(feature = "mcp")]
5mod mcp_submit;
6
7use proc_macro::TokenStream;
8
9use crate::derives::gpui_form::GpuiFormOptions;
10
11/// Derives generated form state, metadata, value holders, and helper APIs.
12#[proc_macro_derive(GpuiForm, attributes(gpui_form, koruma))]
13pub fn gpui_form_derive(input: TokenStream) -> TokenStream {
14    derives::gpui_form::from(
15        input,
16        GpuiFormOptions {
17            generate_shape: cfg!(feature = "inventory"),
18            generate_mcp: cfg!(feature = "mcp"),
19        },
20    )
21}
22
23/// Registers an async function as an MCP submit handler for generated forms.
24#[cfg(feature = "mcp")]
25#[proc_macro_attribute]
26pub fn mcp_submit(attr: TokenStream, item: TokenStream) -> TokenStream {
27    match mcp_submit::expand(attr.into(), item.into()) {
28        Ok(tokens) => tokens.into(),
29        Err(error) => error.to_compile_error().into(),
30    }
31}