我正在尝试在近协议智能合约中返回两个变量
pub fn get_product(&self, product_id: u128) -> (String, bool) {
let product = self.product_map.get(&product_id).unwrap();
(product.product_details_hash, product.product_expired)
}
JavaScript代码:
let hash = await nearcontract.contract.get_product({ product_id: 1 })
它给出一个错误
Cannot deserialize value with Borsh
还可以直接返回struct吗? 例如
pub fn get_product(&self, product_id: u128) -> Product {
let product = self.product_map.get(&product_id).unwrap();
product
}
它也给出错误:
the trait `avrit::create_profile::_IMPL_SERIALIZE_FOR_Input::_serde::Serialize` is not implemented for `avrit::avritstructs::Product
答案 0 :(得分:1)
您的第一个路径应该可以正常工作。 Cannot deserialize value with Borsh
可能来自product_map
,因为前缀冲突而损坏,或者由于重新部署而重用了合同状态。
第二条路径要求在serde::Serialize
上实现Product
。您可以在定义Product
结构时使用衍生操作。
#[derive(serde::Serialize, serde::Deserialize)]
pub struct Product {
...