Rust 基板RPC中的返回结构

Rust 基板RPC中的返回结构,rust,substrate,Rust,Substrate,我们试图在RPC中返回结构,但据我所知,它应该是可序列化的: error[E0277]:没有为`托盘空间::空间'实现特性绑定的`托盘空间::空间:serde::de::反序列化'` | =注:由于“std::vec::vec”的“for”impl中的要求,因此需要` =注意:由于对`std::vec::vec`的`serde::de::DeserializeOwned`的impl有要求,因此需要` =注意:此错误源于属性宏(在夜间构建中,使用-Z宏backtrace运行以获取更多信息) 问题

我们试图在RPC中返回结构,但据我所知,它应该是可序列化的:

error[E0277]:没有为`托盘空间::空间'实现特性绑定的`托盘空间::空间:serde::de::反序列化'`
|
=注:由于“std::vec::vec”的“for”impl中的要求,因此需要`
=注意:由于对`std::vec::vec`的`serde::de::DeserializeOwned`的impl有要求,因此需要`
=注意:此错误源于属性宏(在夜间构建中,使用-Z宏backtrace运行以获取更多信息)
问题是我们使用了
T::Moment
from
pallet\u timestamp

error[E0277]:未满足特征绑定“::矩:::\u serde::Serialize”
-->托盘/空间/src/lib.rs:25:5
|
25 |酒吧创建:WhoAndWhen,
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^::^特征`::^ serde::Serialize`
|
=注意:由于对“托盘”utils::WhoAndWhen的“\:\ \”serde::Serialize”的impl的要求,因此需要`
=注意:`\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\`
您可以建议如何轻松返回这样的结构

#[派生(编码、解码、克隆、Eq、PartialEq、运行时调试、序列化、反序列化)]
pub结构空间{
发布id:SpaceId,
酒吧创建:WhoAndWhen,
发布更新:选项,
酒吧所有者:T::AccountId,
//可由所有者更新:
pub parent_id:选项,
发布句柄:选项,
发布内容:内容,
酒吧隐藏:布尔,
酒吧发帖数量:u32,
酒吧隐藏帖子数量:u32,
酒吧追随者人数:u32,
酒吧得分:i32,
///允许覆盖此空间的默认权限。
发布权限:选项,
}
#[派生(编码、解码、克隆、Eq、PartialEq、运行时调试、序列化、反序列化)]
发布结构WhoAndWhen{
发布帐户:T::AccountId,
发布块:T::BlockNumber,
酒吧时间:T::时刻,
}

您的主要问题是您在这里混合了
std
无std
。基板仅依赖于
std
模式下的
serde
,您可以在项目中的任何
Cargo.toml
文件中了解到这一点

首先解决这个问题:只有在
std
模式下才能派生
serde::*

#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[derive(Encode, Decode, Clone, Eq, PartialEq, RuntimeDebug)]
pub struct Space<T: Trait> {
  // snip.. 
} 
#[cfg_attr(feature=“std”,派生(序列化、反序列化))]
#[派生(编码、解码、克隆、Eq、PartialEq、RuntimeDebug)]
pub结构空间{
//剪断。。
} 

您的主要问题是您在这里混合了
std
无std
。基板仅依赖于
std
模式下的
serde
,您可以在项目中的任何
Cargo.toml
文件中了解到这一点

首先解决这个问题:只有在
std
模式下才能派生
serde::*

#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[derive(Encode, Decode, Clone, Eq, PartialEq, RuntimeDebug)]
pub struct Space<T: Trait> {
  // snip.. 
} 
#[cfg_attr(feature=“std”,派生(序列化、反序列化))]
#[派生(编码、解码、克隆、Eq、PartialEq、RuntimeDebug)]
pub结构空间{
//剪断。。
}