mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-29 17:19:15 +08:00
feat: Add crate attribute to operation macro (#459)
This commit is contained in:
@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user