1#![deny(unused_crate_dependencies)]
2
3use generators::{
4 has_bucket_name::generate_has_bucket_name_tokens, has_content_type::generate_has_content_type,
5 has_key::generate_has_key_token, json_item::generate_byte_stream_conversion_for_json_item,
6 key_builder::generate_key_buidler,
7};
8use proc_macro::TokenStream;
9use quote::quote;
10use struct_info::StructInfo;
11use syn::{DeriveInput, parse_macro_input};
12
13use crate::{generators::has_static_key, has_static_key::generate_has_static_key};
14
15mod generators;
16mod struct_info;
17mod utils;
18
19#[proc_macro_derive(S3BucketItem, attributes(s3_item_prop))]
20pub fn s3_bucket_derive(input: TokenStream) -> TokenStream {
21 let input = parse_macro_input!(input as DeriveInput);
22 let struct_info = StructInfo::from(input);
23
24 let has_bucket_name_token = generate_has_bucket_name_tokens(&struct_info);
25 let has_content_type_token = generate_has_content_type(&struct_info);
26 let has_key_token = generate_has_key_token(&struct_info);
27 let key_builder_token = generate_key_buidler(&struct_info);
28 let has_static_key = generate_has_static_key(&struct_info);
29
30 quote! {
31 #has_bucket_name_token
32 #has_content_type_token
33 #has_key_token
34 #key_builder_token
35 #has_static_key
36 }
37 .into()
38}
39
40#[proc_macro_derive(JsonItem)]
41pub fn json_item_derive(input: TokenStream) -> TokenStream {
42 let input = parse_macro_input!(input as DeriveInput);
43 let struct_info = StructInfo::from(input);
44 let conversion = generate_byte_stream_conversion_for_json_item(&struct_info);
45 quote! {
46 #conversion
47 }
48 .into()
49}