feat: Add crate attribute to operation macro (#459)

This commit is contained in:
Kartikeya Hegde
2023-01-24 13:15:31 +05:30
committed by GitHub
parent dd7eed16c4
commit e9cbf3eed5

View File

@ -255,42 +255,12 @@ fn find_properties(attr: &syn::Attribute) -> syn::Result<HashMap<String, Vec<Str
Ok(syn::Meta::List(syn::MetaList { Ok(syn::Meta::List(syn::MetaList {
ref path, ref path,
paren_token: _, paren_token: _,
mut nested, nested,
})) => { })) => {
path.get_ident().map(|i| i == "operation").ok_or_else(|| { path.get_ident().map(|i| i == "operation").ok_or_else(|| {
helpers::syn_error(path.span(), "Attribute 'operation' was not found") helpers::syn_error(path.span(), "Attribute 'operation' was not found")
})?; })?;
let tracker = nested Ok(HashMap::from_iter(nested.iter().filter_map(find_value)))
.pop()
.ok_or_else(|| {
helpers::syn_error(
nested.span(),
"Invalid format of attributes. Expected format is ops=...,flow=...",
)
})?
.into_value();
let operation = nested
.pop()
.ok_or_else(|| {
helpers::syn_error(
nested.span(),
"Invalid format of attributes. Expected format is ops=...,flow=...",
)
})?
.into_value();
let o = find_value(&tracker).ok_or_else(|| {
helpers::syn_error(
tracker.span(),
"Invalid format of attributes. Expected format is ops=...,flow=...",
)
})?;
let t = find_value(&operation).ok_or_else(|| {
helpers::syn_error(
operation.span(),
"Invalid format of attributes. Expected format is ops=...,flow=...",
)
})?;
Ok(HashMap::from_iter([t, o]))
} }
_ => Err(helpers::syn_error( _ => Err(helpers::syn_error(
attr.span(), attr.span(),
@ -315,6 +285,14 @@ pub fn operation_derive_inner(input: DeriveInput) -> syn::Result<proc_macro::Tok
"Invalid properties. Property 'flow' was not found", "Invalid properties. Property 'flow' was not found",
) )
})?; })?;
let current_crate = syn::Ident::new(
&prop
.get("crate")
.map(|v| v.join(""))
.unwrap_or_else(|| String::from("crate")),
Span::call_site(),
);
let trait_derive = flow.iter().map(|derive| { let trait_derive = flow.iter().map(|derive| {
let derive: Derives = derive.to_owned().into(); let derive: Derives = derive.to_owned().into();
let fns = ops.iter().map(|t| { let fns = ops.iter().map(|t| {
@ -336,15 +314,14 @@ pub fn operation_derive_inner(input: DeriveInput) -> syn::Result<proc_macro::Tok
}; };
let output = quote! { let output = quote! {
const _: () = { const _: () = {
use crate::core::errors::RouterResult; use #current_crate::core::errors::RouterResult;
use crate::core::payments::operations::{ use #current_crate::core::payments::{PaymentData,operations::{
ValidateRequest, ValidateRequest,
PostUpdateTracker, PostUpdateTracker,
GetTracker, GetTracker,
UpdateTracker, UpdateTracker,
PaymentData }};
}; use #current_crate::types::{
use crate::types::{
VerifyRequestData, VerifyRequestData,
PaymentsSyncData, PaymentsSyncData,
PaymentsCaptureData, PaymentsCaptureData,