rhine_schema_derive/lib.rs
1// src/lib.rs
2
3// 本 crate 提供两大功能:
4// 1. 为结构体生成 JSON Schema(用于数据验证等),使用 #[derive(JsonSchema)] 与 #[schema(...)] 属性。
5// 2. 为工具函数生成用于 function calling 的工具 schema,使用属性宏 #[function_tool(...)]。
6//
7// 示例用法:
8//
9// ```rust
10// // 参数结构体,生成 JSON Schema(需实现 JsonSchema)
11// #[derive(JsonSchema)]
12// #[schema(name = "SendEmailParams", description = "Parameters for sending email", strict = true)]
13// pub struct SendEmailParameters {
14// #[schema(desc = "The recipient email address.")]
15// pub to: String,
16// #[schema(desc = "Email subject line.")]
17// pub subject: String,
18// #[schema(desc = "Body of the email message.")]
19// pub body: String,
20// }
21//
22// // 工具函数,使用 #[function_tool(...)] 标记,指定工具描述、参数类型、严格模式等。
23// #[function_tool(
24// description = "Send an email to a given recipient with a subject and message.",
25// parameters = "SendEmailParameters",
26// strict = true
27// )]
28// pub fn send_email(params: SendEmailParameters) {
29// // 实际邮件发送逻辑...
30// }
31//
32// // 调用生成的工具 schema 函数(名称自动生成为 send_email_tool_schema)
33// let tool_schema = send_email_tool_schema();
34// println!("{}", tool_schema.to_string());
35// ```
36
37use proc_macro::TokenStream;
38
39mod attributes;
40mod generator;
41mod type_helpers;
42mod tools;
43mod path_solver;
44
45#[proc_macro_derive(JsonSchema, attributes(schema))]
46pub fn json_schema_derive(input: TokenStream) -> TokenStream {
47 generator::json_schema_derive_impl(input)
48}
49
50#[proc_macro_attribute]
51pub fn tool_schema_derive(attr: TokenStream, item: TokenStream) -> TokenStream {
52 tools::function_tool_attr_impl(attr, item)
53}