1#![allow(clippy::doc_overindented_list_items)]
2#![allow(clippy::doc_lazy_continuation)]
3pub use cosmos_sdk_proto;
5use cosmos_sdk_proto::Any;
6
7include!(concat!(env!("CARGO_MANIFEST_DIR"), "/src/_includes.rs"));
8
9use prost::Name;
10
11pub trait ToAny: Name + Sized {
12 fn to_any(self) -> Any {
14 let value = self.encode_to_vec();
15 let type_url = Self::type_url();
16 Any { type_url, value }
17 }
18}
19
20impl<M: Name> ToAny for M {}
21
22#[cfg(test)]
23mod test {
24 use super::ToAny;
25 use crate::cosmos_sdk_proto::cosmos::bank::v1beta1::MsgSend;
26 use crate::dydxprotocol::clob::MsgCancelOrder;
27
28 #[test]
29 pub fn test_any_conversion() {
31 let msg = MsgCancelOrder {
32 order_id: None,
33 good_til_oneof: None,
34 };
35 let any = msg.to_any();
36 let url = "/dydxprotocol.clob.MsgCancelOrder";
37 assert_eq!(any.type_url, url);
38 }
39
40 #[test]
41 pub fn test_any_conversion_wrapped() {
43 let msg = MsgSend::default();
44 let any = msg.to_any();
45 let url = "/cosmos.bank.v1beta1.MsgSend";
46 assert_eq!(any.type_url, url);
47 }
48}