Crate epee_encoding
source ·Expand description
Epee Encoding
This library contains the Epee binary format found in Monero, unlike other crates this crate does not use serde.
example without derive:
use epee_encoding::{EpeeObject, EpeeObjectBuilder, read_epee_value, write_field, to_bytes, from_bytes};
use epee_encoding::io::{Read, Write};
pub struct Test {
val: u64
}
#[derive(Default)]
pub struct __TestEpeeBuilder {
val: Option<u64>,
}
impl EpeeObjectBuilder<Test> for __TestEpeeBuilder {
fn add_field<R: Read>(&mut self, name: &str, r: &mut R) -> epee_encoding::error::Result<bool> {
match name {
"val" => {self.val = Some(read_epee_value(r)?);}
_ => return Ok(false),
}
Ok(true)
}
fn finish(self) -> epee_encoding::error::Result<Test> {
Ok(
Test {
val: self.val.ok_or_else(|| epee_encoding::error::Error::Format("Required field was not found!"))?
}
)
}
}
impl EpeeObject for Test {
type Builder = __TestEpeeBuilder;
fn number_of_fields(&self) -> u64 {
1
}
fn write_fields<W: Write>(&self, w: &mut W) -> epee_encoding::error::Result<()> {
// write the fields
write_field(&self.val, "val", w)
}
}
let data = [1, 17, 1, 1, 1, 1, 2, 1, 1, 4, 3, 118, 97, 108, 5, 4, 0, 0, 0, 0, 0, 0, 0]; // the data to decode;
let val: Test = from_bytes(&data).unwrap();
let data = to_bytes(&val).unwrap();
example with derive:
ⓘ
use epee_encoding::{EpeeObject, from_bytes, to_bytes};
#[derive(EpeeObject)]
struct Test2 {
val: u64
}
let data = [1, 17, 1, 1, 1, 1, 2, 1, 1, 4, 3, 118, 97, 108, 5, 4, 0, 0, 0, 0, 0, 0, 0]; // the data to decode;
let val: Test2 = from_bytes(&data).unwrap();
let data = to_bytes(&val).unwrap();
Re-exports
pub use marker::InnerMarker;
pub use marker::Marker;
pub use error::*;
Modules
Traits
- A trait for an object that can be turned into epee bytes.
- A trait for an object that can build a type
T
from the epee format. - A trait for epee values, this trait is sealed as all possible epee values are defined in the lib, to make an
EpeeValue
outside the lib you will need to use the traitEpeeObject
.
Functions
- Read the object
T
from a byte array. - Read an epee value from the stream, an epee value is the part after the key including the marker.
- Read a marker from the
Read
, this function should only be used for custom serialisation based on the marker otherwise just useread_epee_value
. - Turn the object into epee bytes.
- Write an epee field.