Skip to main content

s3_bucket_derive/
lib.rs

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}