Skip to content

Commit 8af0a9d

Browse files
committed
chore: Unify MT proxy methods emit
1 parent b4bd4b4 commit 8af0a9d

File tree

2 files changed

+68
-233
lines changed

2 files changed

+68
-233
lines changed

sylvia-derive/src/message.rs

Lines changed: 32 additions & 190 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,7 @@ impl<'a> StructMessage<'a> {
5454
let contract_type = &source.self_ty;
5555

5656
let parsed = Self::parse_struct_message(source, ty);
57-
let Some((method, msg_attr)) = parsed else {
58-
return None;
59-
};
57+
let (method, msg_attr) = parsed?;
6058

6159
let function_name = &method.sig.ident;
6260
let fields = process_fields(&method.sig, &mut generics_checker);
@@ -609,130 +607,13 @@ impl<'a> MsgVariant<'a> {
609607
}
610608
}
611609

612-
pub fn emit_multitest_proxy_methods_declaration<Generic>(
613-
&self,
614-
msg_ty: &MsgType,
615-
custom_msg: &Type,
616-
mt_app: &Type,
617-
error_type: &Type,
618-
generics: &[&Generic],
619-
) -> TokenStream
620-
where
621-
Generic: ToTokens,
622-
{
623-
let sylvia = crate_module();
624-
let Self {
625-
name,
626-
fields,
627-
stripped_return_type,
628-
..
629-
} = self;
630-
631-
let params = fields.iter().map(|field| field.emit_method_field());
632-
let name = Ident::new(&name.to_string().to_case(Case::Snake), name.span());
633-
let enum_name = msg_ty.emit_msg_name();
634-
let enum_name: Type = if !generics.is_empty() {
635-
parse_quote! { #enum_name ::< #(#generics,)* > }
636-
} else {
637-
parse_quote! { #enum_name }
638-
};
639-
640-
match msg_ty {
641-
MsgType::Exec => quote! {
642-
#[track_caller]
643-
fn #name (&self, #(#params,)* ) -> #sylvia ::multitest::ExecProxy::< #error_type, #enum_name, #mt_app, #custom_msg>;
644-
},
645-
MsgType::Migrate => quote! {
646-
#[track_caller]
647-
fn #name (&self, #(#params,)* ) -> #sylvia ::multitest::MigrateProxy::< #error_type, #enum_name, #mt_app, #custom_msg>;
648-
},
649-
MsgType::Query => quote! {
650-
fn #name (&self, #(#params,)* ) -> Result<#stripped_return_type, #error_type>;
651-
},
652-
MsgType::Sudo => quote! {
653-
fn #name (&self, #(#params,)* ) -> Result< #sylvia ::cw_multi_test::AppResponse, #error_type>;
654-
},
655-
_ => quote! {},
656-
}
657-
}
658-
659-
pub fn emit_multitest_proxy_methods<Generic>(
610+
pub fn emit_mt_method_definition(
660611
&self,
661612
msg_ty: &MsgType,
662613
custom_msg: &Type,
663614
mt_app: &Type,
664615
error_type: &Type,
665-
generics: &[&Generic],
666-
) -> TokenStream
667-
where
668-
Generic: ToTokens,
669-
{
670-
let sylvia = crate_module();
671-
let Self {
672-
name,
673-
fields,
674-
stripped_return_type,
675-
..
676-
} = self;
677-
678-
let params = fields.iter().map(|field| field.emit_method_field());
679-
let arguments = fields.iter().map(MsgField::name);
680-
let name = Ident::new(&name.to_string().to_case(Case::Snake), name.span());
681-
let enum_name = msg_ty.emit_msg_name();
682-
let enum_name: Type = if !generics.is_empty() {
683-
parse_quote! { #enum_name ::< #(#generics,)* > }
684-
} else {
685-
parse_quote! { #enum_name }
686-
};
687-
688-
match msg_ty {
689-
MsgType::Exec => quote! {
690-
#[track_caller]
691-
fn #name (&self, #(#params,)* ) -> #sylvia ::multitest::ExecProxy::< #error_type, #enum_name, #mt_app, #custom_msg> {
692-
let msg = #enum_name :: #name ( #(#arguments),* );
693-
694-
#sylvia ::multitest::ExecProxy::new(&self.contract_addr, msg, &self.app)
695-
}
696-
},
697-
MsgType::Migrate => quote! {
698-
#[track_caller]
699-
fn #name (&self, #(#params,)* ) -> #sylvia ::multitest::MigrateProxy::< #error_type, #enum_name, #mt_app, #custom_msg> {
700-
let msg = #enum_name ::new( #(#arguments),* );
701-
702-
#sylvia ::multitest::MigrateProxy::new(&self.contract_addr, msg, &self.app)
703-
}
704-
},
705-
MsgType::Query => quote! {
706-
fn #name (&self, #(#params,)* ) -> Result<#stripped_return_type, #error_type> {
707-
let msg = #enum_name :: #name ( #(#arguments),* );
708-
709-
(*self.app)
710-
.querier()
711-
.query_wasm_smart(self.contract_addr.clone(), &msg)
712-
.map_err(Into::into)
713-
}
714-
},
715-
MsgType::Sudo => quote! {
716-
fn #name (&self, #(#params,)* ) -> Result< #sylvia ::cw_multi_test::AppResponse, #error_type> {
717-
let msg = #enum_name :: #name ( #(#arguments),* );
718-
719-
(*self.app)
720-
.app_mut()
721-
.wasm_sudo(self.contract_addr.clone(), &msg)
722-
.map_err(|err| err.downcast().unwrap())
723-
}
724-
},
725-
_ => quote! {},
726-
}
727-
}
728-
729-
pub fn emit_interface_multitest_proxy_methods(
730-
&self,
731-
msg_ty: &MsgType,
732-
custom_msg: &Type,
733-
mt_app: &Type,
734-
error_type: &Type,
735-
interface_api: &TokenStream,
616+
api: &TokenStream,
736617
) -> TokenStream {
737618
let sylvia = crate_module();
738619
let Self {
@@ -753,16 +634,16 @@ impl<'a> MsgVariant<'a> {
753634
match msg_ty {
754635
MsgType::Exec => quote! {
755636
#[track_caller]
756-
fn #name (&self, #(#params,)* ) -> #sylvia ::multitest::ExecProxy::<Self:: #error_type, #interface_api :: #type_name, #mt_app, #custom_msg> {
757-
let msg = #interface_api :: #type_name :: #name ( #(#arguments),* );
637+
fn #name (&self, #(#params,)* ) -> #sylvia ::multitest::ExecProxy::< #error_type, #api :: #type_name, #mt_app, #custom_msg> {
638+
let msg = #api :: #type_name :: #name ( #(#arguments),* );
758639

759640
#sylvia ::multitest::ExecProxy::new(&self.contract_addr, msg, &self.app)
760641
}
761642
},
762643
MsgType::Query => {
763644
quote! {
764-
fn #name (&self, #(#params,)* ) -> Result<#return_type, Self:: #error_type> {
765-
let msg = #interface_api :: #type_name :: #name ( #(#arguments),* );
645+
fn #name (&self, #(#params,)* ) -> Result<#return_type, #error_type> {
646+
let msg = #api :: #type_name :: #name ( #(#arguments),* );
766647

767648
(*self.app)
768649
.querier()
@@ -772,25 +653,33 @@ impl<'a> MsgVariant<'a> {
772653
}
773654
}
774655
MsgType::Sudo => quote! {
775-
fn #name (&self, #(#params,)* ) -> Result< #sylvia ::cw_multi_test::AppResponse, Self:: #error_type> {
776-
let msg = #interface_api :: #type_name :: #name ( #(#arguments),* );
656+
fn #name (&self, #(#params,)* ) -> Result< #sylvia ::cw_multi_test::AppResponse, #error_type> {
657+
let msg = #api :: #type_name :: #name ( #(#arguments),* );
777658

778659
(*self.app)
779660
.app_mut()
780661
.wasm_sudo(self.contract_addr.clone(), &msg)
781662
.map_err(|err| err.downcast().unwrap())
782663
}
783664
},
665+
MsgType::Migrate => quote! {
666+
#[track_caller]
667+
fn #name (&self, #(#params,)* ) -> #sylvia ::multitest::MigrateProxy::< #error_type, #api :: #type_name , #mt_app, #custom_msg> {
668+
let msg = #api :: #type_name ::new( #(#arguments),* );
669+
670+
#sylvia ::multitest::MigrateProxy::new(&self.contract_addr, msg, &self.app)
671+
}
672+
},
784673
_ => quote! {},
785674
}
786675
}
787676

788-
pub fn emit_proxy_methods_declarations(
677+
pub fn emit_mt_method_declaration(
789678
&self,
790679
msg_ty: &MsgType,
791680
custom_msg: &Type,
792681
error_type: &Type,
793-
interface_enum: &TokenStream,
682+
api: &TokenStream,
794683
) -> TokenStream {
795684
let sylvia = crate_module();
796685
let Self {
@@ -809,15 +698,19 @@ impl<'a> MsgVariant<'a> {
809698

810699
match msg_ty {
811700
MsgType::Exec => quote! {
812-
fn #name (&self, #(#params,)* ) -> #sylvia ::multitest::ExecProxy::< Self:: #error_type, #interface_enum :: #type_name, MtApp, #custom_msg>;
701+
fn #name (&self, #(#params,)* ) -> #sylvia ::multitest::ExecProxy::< #error_type, #api:: #type_name, MtApp, #custom_msg>;
813702
},
814703
MsgType::Query => {
815704
quote! {
816-
fn #name (&self, #(#params,)* ) -> Result<#return_type, Self:: #error_type>;
705+
fn #name (&self, #(#params,)* ) -> Result<#return_type, #error_type>;
817706
}
818707
}
819708
MsgType::Sudo => quote! {
820-
fn #name (&self, #(#params,)* ) -> Result< #sylvia ::cw_multi_test::AppResponse, Self:: #error_type>;
709+
fn #name (&self, #(#params,)* ) -> Result< #sylvia ::cw_multi_test::AppResponse, #error_type>;
710+
},
711+
MsgType::Migrate => quote! {
712+
#[track_caller]
713+
fn #name (&self, #(#params,)* ) -> #sylvia ::multitest::MigrateProxy::< #error_type, #api :: #type_name, MtApp, #custom_msg>;
821714
},
822715
_ => quote! {},
823716
}
@@ -940,82 +833,31 @@ where
940833
}
941834
}
942835

943-
pub fn emit_multitest_proxy_methods_declaration(
836+
pub fn emit_mt_method_definitions(
944837
&self,
945838
custom_msg: &Type,
946839
mt_app: &Type,
947840
error_type: &Type,
841+
api: &TokenStream,
948842
) -> Vec<TokenStream> {
949843
self.variants
950844
.iter()
951845
.map(|variant| {
952-
variant.emit_multitest_proxy_methods_declaration(
953-
&self.msg_ty,
954-
custom_msg,
955-
mt_app,
956-
error_type,
957-
&self.used_generics,
958-
)
846+
variant.emit_mt_method_definition(&self.msg_ty, custom_msg, mt_app, error_type, api)
959847
})
960848
.collect()
961849
}
962850

963-
pub fn emit_multitest_proxy_methods(
851+
pub fn emit_mt_method_declarations(
964852
&self,
965853
custom_msg: &Type,
966-
mt_app: &Type,
967854
error_type: &Type,
855+
api: &TokenStream,
968856
) -> Vec<TokenStream> {
969857
self.variants
970858
.iter()
971859
.map(|variant| {
972-
variant.emit_multitest_proxy_methods(
973-
&self.msg_ty,
974-
custom_msg,
975-
mt_app,
976-
error_type,
977-
&self.used_generics,
978-
)
979-
})
980-
.collect()
981-
}
982-
983-
pub fn emit_interface_multitest_proxy_methods(
984-
&self,
985-
custom_msg: &Type,
986-
mt_app: &Type,
987-
error_type: &Type,
988-
interface_api: &TokenStream,
989-
) -> Vec<TokenStream> {
990-
self.variants
991-
.iter()
992-
.map(|variant| {
993-
variant.emit_interface_multitest_proxy_methods(
994-
&self.msg_ty,
995-
custom_msg,
996-
mt_app,
997-
error_type,
998-
interface_api,
999-
)
1000-
})
1001-
.collect()
1002-
}
1003-
1004-
pub fn emit_proxy_methods_declarations(
1005-
&self,
1006-
custom_msg: &Type,
1007-
error_type: &Type,
1008-
interface_enum: &TokenStream,
1009-
) -> Vec<TokenStream> {
1010-
self.variants
1011-
.iter()
1012-
.map(|variant| {
1013-
variant.emit_proxy_methods_declarations(
1014-
&self.msg_ty,
1015-
custom_msg,
1016-
error_type,
1017-
interface_enum,
1018-
)
860+
variant.emit_mt_method_declaration(&self.msg_ty, custom_msg, error_type, api)
1019861
})
1020862
.collect()
1021863
}

0 commit comments

Comments
 (0)