mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 12:17:58 +00:00
Implement crypto byte array newtypes in term of a shared type (#3684)
Introduces `CryptoBytes` type defined as: ```rust pub struct CryptoBytes<const N: usize, Tag = ()>(pub [u8; N], PhantomData<fn() -> Tag>); ``` The type implements a bunch of methods and traits which are typically expected from a byte array newtype (NOTE: some of the methods and trait implementations IMO are a bit redundant, but I decided to maintain them all to not change too much stuff in this PR) It also introduces two (generic) typical consumers of `CryptoBytes`: `PublicBytes` and `SignatureBytes`. ```rust pub struct PublicTag; pub PublicBytes<const N: usize, CryptoTag> = CryptoBytes<N, (PublicTag, CryptoTag)>; pub struct SignatureTag; pub SignatureBytes<const N: usize, CryptoTag> = CryptoBytes<N, (SignatureTag, CryptoTag)>; ``` Both of them use a tag to differentiate the two types at a higher level. Downstream specializations will further specialize using a dedicated crypto tag. For example in ECDSA: ```rust pub struct EcdsaTag; pub type Public = PublicBytes<PUBLIC_KEY_SERIALIZED_SIZE, EcdsaTag>; pub type Signature = PublicBytes<PUBLIC_KEY_SERIALIZED_SIZE, EcdsaTag>; ``` Overall we have a cleaner and most importantly **consistent** code for all the types involved All these details are opaque to the end user which can use `Public` and `Signature` for the cryptos as before
This commit is contained in:
+6
-6
@@ -13,8 +13,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeDecode` is not satisfied
|
||||
|
|
||||
= help: the following other types implement trait `WrapperTypeDecode`:
|
||||
Box<T>
|
||||
Rc<T>
|
||||
frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes
|
||||
Rc<T>
|
||||
Arc<T>
|
||||
= note: required for `Bar` to implement `Decode`
|
||||
= note: required for `Bar` to implement `FullCodec`
|
||||
@@ -65,8 +65,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeEncode` is not satisfied
|
||||
bytes::bytes::Bytes
|
||||
Cow<'a, T>
|
||||
parity_scale_codec::Ref<'a, T, U>
|
||||
Rc<T>
|
||||
frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes
|
||||
Rc<T>
|
||||
Arc<T>
|
||||
Vec<T>
|
||||
and $N others
|
||||
@@ -106,8 +106,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeDecode` is not satisfied
|
||||
|
|
||||
= help: the following other types implement trait `WrapperTypeDecode`:
|
||||
Box<T>
|
||||
Rc<T>
|
||||
frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes
|
||||
Rc<T>
|
||||
Arc<T>
|
||||
= note: required for `Bar` to implement `Decode`
|
||||
= note: required for `Bar` to implement `FullCodec`
|
||||
@@ -148,8 +148,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeEncode` is not satisfied
|
||||
bytes::bytes::Bytes
|
||||
Cow<'a, T>
|
||||
parity_scale_codec::Ref<'a, T, U>
|
||||
Rc<T>
|
||||
frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes
|
||||
Rc<T>
|
||||
Arc<T>
|
||||
Vec<T>
|
||||
and $N others
|
||||
@@ -168,8 +168,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeDecode` is not satisfied
|
||||
|
|
||||
= help: the following other types implement trait `WrapperTypeDecode`:
|
||||
Box<T>
|
||||
Rc<T>
|
||||
frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes
|
||||
Rc<T>
|
||||
Arc<T>
|
||||
= note: required for `Bar` to implement `Decode`
|
||||
= note: required for `Bar` to implement `FullCodec`
|
||||
@@ -210,8 +210,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeEncode` is not satisfied
|
||||
bytes::bytes::Bytes
|
||||
Cow<'a, T>
|
||||
parity_scale_codec::Ref<'a, T, U>
|
||||
Rc<T>
|
||||
frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes
|
||||
Rc<T>
|
||||
Arc<T>
|
||||
Vec<T>
|
||||
and $N others
|
||||
|
||||
+6
-6
@@ -13,8 +13,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeDecode` is not satisfied
|
||||
|
|
||||
= help: the following other types implement trait `WrapperTypeDecode`:
|
||||
Box<T>
|
||||
Rc<T>
|
||||
frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes
|
||||
Rc<T>
|
||||
Arc<T>
|
||||
= note: required for `Bar` to implement `Decode`
|
||||
= note: required for `Bar` to implement `FullCodec`
|
||||
@@ -65,8 +65,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeEncode` is not satisfied
|
||||
bytes::bytes::Bytes
|
||||
Cow<'a, T>
|
||||
parity_scale_codec::Ref<'a, T, U>
|
||||
Rc<T>
|
||||
frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes
|
||||
Rc<T>
|
||||
Arc<T>
|
||||
Vec<T>
|
||||
and $N others
|
||||
@@ -106,8 +106,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeDecode` is not satisfied
|
||||
|
|
||||
= help: the following other types implement trait `WrapperTypeDecode`:
|
||||
Box<T>
|
||||
Rc<T>
|
||||
frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes
|
||||
Rc<T>
|
||||
Arc<T>
|
||||
= note: required for `Bar` to implement `Decode`
|
||||
= note: required for `Bar` to implement `FullCodec`
|
||||
@@ -148,8 +148,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeEncode` is not satisfied
|
||||
bytes::bytes::Bytes
|
||||
Cow<'a, T>
|
||||
parity_scale_codec::Ref<'a, T, U>
|
||||
Rc<T>
|
||||
frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes
|
||||
Rc<T>
|
||||
Arc<T>
|
||||
Vec<T>
|
||||
and $N others
|
||||
@@ -168,8 +168,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeDecode` is not satisfied
|
||||
|
|
||||
= help: the following other types implement trait `WrapperTypeDecode`:
|
||||
Box<T>
|
||||
Rc<T>
|
||||
frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes
|
||||
Rc<T>
|
||||
Arc<T>
|
||||
= note: required for `Bar` to implement `Decode`
|
||||
= note: required for `Bar` to implement `FullCodec`
|
||||
@@ -210,8 +210,8 @@ error[E0277]: the trait bound `Bar: WrapperTypeEncode` is not satisfied
|
||||
bytes::bytes::Bytes
|
||||
Cow<'a, T>
|
||||
parity_scale_codec::Ref<'a, T, U>
|
||||
Rc<T>
|
||||
frame_support::sp_runtime::sp_application_crypto::sp_core::Bytes
|
||||
Rc<T>
|
||||
Arc<T>
|
||||
Vec<T>
|
||||
and $N others
|
||||
|
||||
Reference in New Issue
Block a user