1 unstable release
0.1.0 | Apr 13, 2021 |
---|
#21 in #casper
170 downloads per month
Used in 18 crates
(5 directly)
7KB
100 lines
This crate contains three derive macros for casper_types::CLTyped
,
casper_types::bytesrepr::FromBytes
and casper_types::bytesrepr::ToBytes
.
You might want to implement these three traits for a struct
you want to store in Casper storage. See storage API documentation on docs.casperlabs.io.
A macro declared on a struct like this:
use casper_types_derive::{CLTyped, ToBytes, FromBytes};
#[derive(CLTyped, ToBytes, FromBytes)]
struct Dog {
name: String,
likes_treat: BTreeMap<String, bool>,
}
Will expand into this:
impl CLTypes for Dog {
fn cl_type(&self) -> CLType {
CLType::Any
}
}
impl FromBytes for Dog {
fn from_bytes(bytes: &[u8]) -> Result<(Self, &[u8]), casper_types::bytesrepr::Error> {
let (name, bytes) = FromBytes::from_bytes(bytes)?;
let (likes_treat, bytes) = FromBytes::from_bytes(bytes)?;
let value = Dog {
name,
likes_treat,
};
Ok((value, bytes))
}
}
impl ToBytes for Dog {
fn serialized_length(&self) -> usize {
let mut size = 0;
size += name.serialized_length();
size += likes_treat.serialized_length();
return size;
}
fn to_bytes(&self) -> Result<Vec<u8>, casper_types::bytesrepr::Error> {
let mut vec = Vec::with_capacity(self.serialized_length());
vec.append(self.name.to_bytes()?);
vec.append(self.likes_treat.to_bytes()?);
Ok(vec)
}
}
Dependencies
~1.5MB
~37K SLoC