2022-07-23 00:40:30 +00:00
|
|
|
mod api_group;
|
|
|
|
mod api_method;
|
2022-07-12 11:51:56 +00:00
|
|
|
mod group;
|
2022-07-23 00:38:00 +00:00
|
|
|
mod group_method;
|
2022-07-12 10:28:03 +00:00
|
|
|
mod skeleton;
|
2022-07-12 11:41:03 +00:00
|
|
|
mod util;
|
2022-07-12 10:28:03 +00:00
|
|
|
|
2022-07-10 17:06:19 +02:00
|
|
|
use case::CaseExt;
|
2022-07-12 10:28:03 +00:00
|
|
|
use proc_macro2::TokenStream;
|
2022-07-12 11:51:56 +00:00
|
|
|
use quote::quote;
|
2022-07-10 17:06:19 +02:00
|
|
|
|
2022-07-12 11:51:56 +00:00
|
|
|
use crate::{md_parser, parser};
|
2022-07-12 10:28:03 +00:00
|
|
|
|
2022-07-12 11:51:56 +00:00
|
|
|
use self::{group::generate_groups, skeleton::generate_skeleton};
|
2022-07-12 10:28:03 +00:00
|
|
|
|
|
|
|
pub fn generate(ast: &syn::DeriveInput, api_content: &str) -> TokenStream {
|
|
|
|
let ident = &ast.ident;
|
|
|
|
|
2022-07-12 11:35:11 +00:00
|
|
|
let token_tree = md_parser::TokenTreeFactory::create(api_content);
|
|
|
|
let api_groups = parser::parse_api_groups(token_tree);
|
2022-07-12 10:28:03 +00:00
|
|
|
|
|
|
|
let skeleton = generate_skeleton(ident);
|
|
|
|
let groups = generate_groups(api_groups);
|
|
|
|
let impl_ident = syn::Ident::new(&format!("{}_impl", ident).to_snake(), ident.span());
|
|
|
|
|
|
|
|
quote! {
|
|
|
|
pub mod #impl_ident {
|
|
|
|
#skeleton
|
|
|
|
#groups
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|