mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-27 10:27:59 +00:00
More Extensible Multiaddress Format (#7380)
* More extensible multiaddress format * update name * Don't depend on indices to define multiaddress type * Use MultiAddress in Node Template too! * reduce traits, fix build * support multiple `StaticLookup` * bump tx version * feedback
This commit is contained in:
@@ -209,6 +209,44 @@ impl<T> Lookup for IdentityLookup<T> {
|
||||
fn lookup(&self, x: T) -> Result<T, LookupError> { Ok(x) }
|
||||
}
|
||||
|
||||
/// A lookup implementation returning the `AccountId` from a `MultiAddress`.
|
||||
pub struct AccountIdLookup<AccountId, AccountIndex>(PhantomData<(AccountId, AccountIndex)>);
|
||||
impl<AccountId, AccountIndex> StaticLookup for AccountIdLookup<AccountId, AccountIndex>
|
||||
where
|
||||
AccountId: Codec + Clone + PartialEq + Debug,
|
||||
AccountIndex: Codec + Clone + PartialEq + Debug,
|
||||
crate::MultiAddress<AccountId, AccountIndex>: Codec,
|
||||
{
|
||||
type Source = crate::MultiAddress<AccountId, AccountIndex>;
|
||||
type Target = AccountId;
|
||||
fn lookup(x: Self::Source) -> Result<Self::Target, LookupError> {
|
||||
match x {
|
||||
crate::MultiAddress::Id(i) => Ok(i),
|
||||
_ => Err(LookupError),
|
||||
}
|
||||
}
|
||||
fn unlookup(x: Self::Target) -> Self::Source {
|
||||
crate::MultiAddress::Id(x)
|
||||
}
|
||||
}
|
||||
|
||||
/// Perform a StaticLookup where there are multiple lookup sources of the same type.
|
||||
impl<A, B> StaticLookup for (A, B)
|
||||
where
|
||||
A: StaticLookup,
|
||||
B: StaticLookup<Source = A::Source, Target = A::Target>,
|
||||
{
|
||||
type Source = A::Source;
|
||||
type Target = A::Target;
|
||||
|
||||
fn lookup(x: Self::Source) -> Result<Self::Target, LookupError> {
|
||||
A::lookup(x.clone()).or_else(|_| B::lookup(x))
|
||||
}
|
||||
fn unlookup(x: Self::Target) -> Self::Source {
|
||||
A::unlookup(x)
|
||||
}
|
||||
}
|
||||
|
||||
/// Extensible conversion trait. Generic over both source and destination types.
|
||||
pub trait Convert<A, B> {
|
||||
/// Make conversion.
|
||||
|
||||
Reference in New Issue
Block a user