我得到一个错误:Failed to serialize or deserialize account data: Unknown'
。我正在尝试获取这样的数据:let mut bet_account = BidData::try_from_slice(&bet.data.borrow()[..])?;
,其中BidData包含字段bids: Vec<Bid>
。
#[derive(BorshSerialize, BorshDeserialize, Debug)]
pub struct Bid {
/// XJUST coins
pub xjust: u64,
/// selected side
pub side: u8,
/// user key
pub pubkey: String,
}
#[derive(BorshDeserialize, BorshSerialize, Debug)]
pub struct BidData {
// list bids
pub bids: Vec<Bid>
}
这个问题在这里有更详细的描述。
更容易使用borsh的派生宏提供的内容:
#[derive(BorshSerialize, BorshDeserialize, Debug)]
pub struct Bid {
/// XJUST coins
pub xjust: u64,
/// selected side
pub side: u8,
/// user key
pub pubkey: String,
}
#[derive(BorshDeserialize, BorshSerialize, Debug, Default)]
pub struct BidData {
// list bids
pub bids: Vec<Bid>,
}
#[cfg(test)]
mod test {
use borsh::BorshSerialize;
use super::{Bid, BidData};
#[test]
fn test_ser() {
let bid1 = Bid {
xjust: 100_000,
side: 2,
pubkey: "".to_string(),
};
let mut bid_data = BidData::default();
bid_data.bids.push(bid1);
let ser_bid_data = bid_data.try_to_vec().unwrap();
println!("{:?}", ser_bid_data);
let deser_bid_data = BidData::try_from_slice(&ser_bid_data);
println!("{:?}", deser_bid_data);
}
}
产品:
running 1 test
[1, 0, 0, 0, 160, 134, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0]
Ok(BidData { bids: [Bid { xjust: 100000, side: 2, pubkey: "" }] })