difftreelog
fix serde rpc
in: master
3 files changed
client/rpc/src/lib.rsdiffbeforeafterboth--- a/client/rpc/src/lib.rs
+++ b/client/rpc/src/lib.rs
@@ -63,7 +63,7 @@
account: CrossAccountId,
token: TokenId,
at: Option<BlockHash>,
- ) -> Result<u128>;
+ ) -> Result<String>;
#[rpc(name = "nft_allowance")]
fn allowance(
&self,
@@ -72,7 +72,7 @@
spender: CrossAccountId,
token: TokenId,
at: Option<BlockHash>,
- ) -> Result<u128>;
+ ) -> Result<String>;
#[rpc(name = "nft_adminlist")]
fn adminlist(&self, collection: CollectionId, at: Option<BlockHash>) -> Result<Vec<AccountId>>;
@@ -109,7 +109,7 @@
}
macro_rules! pass_method {
- ($method_name:ident($($name:ident: $ty:ty),* $(,)?) -> $result:ty) => {
+ ($method_name:ident($($name:ident: $ty:ty),* $(,)?) -> $result:ty $(=> $mapper:expr)?) => {
fn $method_name(
&self,
$(
@@ -124,7 +124,9 @@
code: ErrorCode::ServerError(Error::RuntimeError.into()),
message: "Unable to query".into(),
data: Some(format!("{:?}", e).into()),
- })
+ }) $(
+ .map($mapper)
+ )?
}
};
}
@@ -145,8 +147,8 @@
pass_method!(variable_metadata(collection: CollectionId, token: TokenId) -> Vec<u8>);
pass_method!(collection_tokens(collection: CollectionId) -> u32);
pass_method!(account_balance(collection: CollectionId, account: CrossAccountId) -> u32);
- pass_method!(balance(collection: CollectionId, account: CrossAccountId, token: TokenId) -> u128);
- pass_method!(allowance(collection: CollectionId, sender: CrossAccountId, spender: CrossAccountId, token: TokenId) -> u128);
+ pass_method!(balance(collection: CollectionId, account: CrossAccountId, token: TokenId) -> String => |v| v.to_string());
+ pass_method!(allowance(collection: CollectionId, sender: CrossAccountId, spender: CrossAccountId, token: TokenId) -> String => |v| v.to_string());
pass_method!(adminlist(collection: CollectionId) -> Vec<AccountId>);
pass_method!(allowlist(collection: CollectionId) -> Vec<AccountId>);
pallets/common/Cargo.tomldiffbeforeafterboth212122pallet-evm = { default-features = false, version = "6.0.0-dev", git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.10" }22pallet-evm = { default-features = false, version = "6.0.0-dev", git = "https://github.com/uniquenetwork/frontier.git", branch = "unique-polkadot-v0.9.10" }23serde = { version = "1.0.130", default-features = false }23serde = { version = "1.0.130", default-features = false }24scale-info = { version = "1.0.0", default-features = false, features = [25 "derive",26] }242725[features]28[features]26default = ["std"]29default = ["std"]pallets/common/src/account.rsdiffbeforeafterboth--- a/pallets/common/src/account.rs
+++ b/pallets/common/src/account.rs
@@ -20,7 +20,14 @@
fn from_eth(account: H160) -> Self;
}
-#[derive(Eq, Serialize, Deserialize)]
+#[derive(Encode, Decode, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+enum BasicCrossAccountIdRepr<AccountId> {
+ Substrate(AccountId),
+ Ethereum(H160),
+}
+
+#[derive(Eq)]
pub struct BasicCrossAccountId<T: Config> {
/// If true - then ethereum is canonical encoding
from_ethereum: bool,
@@ -84,12 +91,7 @@
}
impl<T: Config> Encode for BasicCrossAccountId<T> {
fn encode(&self) -> Vec<u8> {
- let as_result = if !self.from_ethereum {
- Ok(self.substrate.clone())
- } else {
- Err(self.ethereum)
- };
- as_result.encode()
+ BasicCrossAccountIdRepr::from(self.clone()).encode()
}
}
impl<T: Config> EncodeLike for BasicCrossAccountId<T> {}
@@ -98,12 +100,34 @@
where
I: codec::Input,
{
- Ok(match <Result<T::AccountId, H160>>::decode(input)? {
- Ok(s) => Self::from_sub(s),
- Err(e) => Self::from_eth(e),
- })
+ Ok(BasicCrossAccountIdRepr::decode(input)?.into())
}
}
+impl<T> Serialize for BasicCrossAccountId<T>
+where
+ T: Config,
+ T::AccountId: Serialize,
+{
+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
+ where
+ S: serde::Serializer,
+ {
+ let repr = BasicCrossAccountIdRepr::from(self.clone());
+ (&repr).serialize(serializer)
+ }
+}
+impl<'de, T> Deserialize<'de> for BasicCrossAccountId<T>
+where
+ T: Config,
+ T::AccountId: Deserialize<'de>,
+{
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
+ where
+ D: serde::Deserializer<'de>,
+ {
+ Ok(BasicCrossAccountIdRepr::deserialize(deserializer)?.into())
+ }
+}
impl<T: Config> CrossAccountId<T::AccountId> for BasicCrossAccountId<T> {
fn as_sub(&self) -> &T::AccountId {
&self.substrate
@@ -126,6 +150,23 @@
}
}
}
+impl<T: Config> From<BasicCrossAccountIdRepr<T::AccountId>> for BasicCrossAccountId<T> {
+ fn from(repr: BasicCrossAccountIdRepr<T::AccountId>) -> Self {
+ match repr {
+ BasicCrossAccountIdRepr::Substrate(s) => Self::from_sub(s),
+ BasicCrossAccountIdRepr::Ethereum(e) => Self::from_eth(e),
+ }
+ }
+}
+impl<T: Config> From<BasicCrossAccountId<T>> for BasicCrossAccountIdRepr<T::AccountId> {
+ fn from(v: BasicCrossAccountId<T>) -> Self {
+ if v.from_ethereum {
+ BasicCrossAccountIdRepr::Ethereum(*v.as_eth())
+ } else {
+ BasicCrossAccountIdRepr::Substrate(v.as_sub().clone())
+ }
+ }
+}
pub trait EvmBackwardsAddressMapping<AccountId> {
fn from_account_id(account_id: AccountId) -> H160;