use proc_macro::TokenStream;
#[cfg(not(test))]
use proc_macro_crate::{FoundCrate, crate_name};
use quote::quote;
use std::collections::BTreeMap;
use syn::{
Attribute, Data, DeriveInput, Expr, Fields, GenericArgument, Ident, LitBool, LitStr, Path,
PathArguments, Type, ext::IdentExt as _, parse_macro_input, parse_quote, spanned::Spanned as _,
};
mod crate_paths;
mod json_schema;
mod options;
mod tool_input;
use crate_paths::*;
use json_schema::*;
use options::*;
use tool_input::*;
#[proc_macro_derive(McpJsonSchema, attributes(mcp, serde))]
pub fn derive_mcp_json_schema(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
match expand_mcp_json_schema(input) {
Ok(tokens) => tokens.into(),
Err(error) => error.to_compile_error().into(),
}
}
#[proc_macro_derive(McpToolInput, attributes(mcp, serde))]
pub fn derive_mcp_tool_input(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
match expand_mcp_tool_input(input) {
Ok(tokens) => tokens.into(),
Err(error) => error.to_compile_error().into(),
}
}
#[cfg(test)]
mod tests;