use crate::tool::ir::{DocIr, ErrorKindIr};
use proc_macro2::TokenStream;
use quote::quote;
pub fn doc_tokens(doc: &DocIr) -> TokenStream {
doc_tokens_with_namespace(doc, quote! { golem_rust::agentic })
}
pub fn wire_doc_tokens(doc: &DocIr) -> TokenStream {
doc_tokens_with_namespace(doc, quote! { golem_rust::schema::tool::wit::wire })
}
fn doc_tokens_with_namespace(doc: &DocIr, namespace: TokenStream) -> TokenStream {
let summary = &doc.summary;
let description = &doc.description;
let examples = doc.examples.iter().map(|ex| {
let title = &ex.title;
let body = &ex.body;
quote! {
#namespace::Example {
title: #title.to_string(),
body: #body.to_string(),
}
}
});
quote! {
#namespace::Doc {
summary: #summary.to_string(),
description: #description.to_string(),
examples: vec![ #(#examples),* ],
}
}
}
pub fn error_kind_tokens(kind: ErrorKindIr) -> TokenStream {
match kind {
ErrorKindIr::UsageError => quote! {
golem_rust::agentic::ErrorKind::UsageError
},
ErrorKindIr::RuntimeError => quote! {
golem_rust::agentic::ErrorKind::RuntimeError
},
}
}