gear_subxt/utils/
multi_address.rs1use codec::{Decode, Encode};
10
11#[derive(
15 Clone,
16 Eq,
17 PartialEq,
18 Ord,
19 PartialOrd,
20 Encode,
21 Decode,
22 Debug,
23 scale_encode::EncodeAsType,
24 scale_decode::DecodeAsType,
25)]
26pub enum MultiAddress<AccountId, AccountIndex> {
27 Id(AccountId),
29 Index(#[codec(compact)] AccountIndex),
31 Raw(Vec<u8>),
33 Address32([u8; 32]),
35 Address20([u8; 20]),
37}
38
39impl<AccountId, AccountIndex> From<AccountId> for MultiAddress<AccountId, AccountIndex> {
40 fn from(a: AccountId) -> Self {
41 Self::Id(a)
42 }
43}
44
45#[cfg(feature = "substrate-compat")]
47mod substrate_impls {
48 use super::{super::AccountId32, *};
49
50 impl<N> From<sp_runtime::AccountId32> for MultiAddress<AccountId32, N> {
51 fn from(value: sp_runtime::AccountId32) -> Self {
52 let val: AccountId32 = value.into();
53 val.into()
54 }
55 }
56
57 impl<Id, N> From<sp_runtime::MultiAddress<Id, N>> for MultiAddress<AccountId32, N>
58 where
59 Id: Into<AccountId32>,
60 {
61 fn from(value: sp_runtime::MultiAddress<Id, N>) -> Self {
62 match value {
63 sp_runtime::MultiAddress::Id(v) => Self::Id(v.into()),
64 sp_runtime::MultiAddress::Index(v) => Self::Index(v),
65 sp_runtime::MultiAddress::Raw(v) => Self::Raw(v),
66 sp_runtime::MultiAddress::Address32(v) => Self::Address32(v),
67 sp_runtime::MultiAddress::Address20(v) => Self::Address20(v),
68 }
69 }
70 }
71}