Trait ark_serialize::CanonicalSerialize[][src]

pub trait CanonicalSerialize {
    fn serialize<W: Write>(&self, writer: W) -> Result<(), SerializationError>;
fn serialized_size(&self) -> usize; fn serialize_uncompressed<W: Write>(
        &self,
        writer: W
    ) -> Result<(), SerializationError> { ... }
fn serialize_unchecked<W: Write>(
        &self,
        writer: W
    ) -> Result<(), SerializationError> { ... }
fn uncompressed_size(&self) -> usize { ... } }

Serializer in little endian format. The serialization format must be ‘length-extension’ safe. e.g. if T implements Canonical Serialize and Deserialize, then for all strings x, y, if a = T::deserialize(Reader(x)) and a is not an error, then it must be the case that a = T::deserialize(Reader(x || y)), and that both readers read the same number of bytes.

This trait can be derived if all fields of a struct implement CanonicalSerialize and the derive feature is enabled.

Example

// The `derive` feature must be set for the derivation to work.
use ark_serialize::*;

#[derive(CanonicalSerialize)]
struct TestStruct {
    a: u64,
    b: (u64, (u64, u64)),
}

If your code depends on algebra instead, the example works analogously when importing algebra::serialize::*.

Required methods

fn serialize<W: Write>(&self, writer: W) -> Result<(), SerializationError>[src]

Serializes self into writer. It is left up to a particular type for how it strikes the serialization efficiency vs compression tradeoff. For standard types (e.g. bool, lengths, etc.) typically an uncompressed form is used, whereas for algebraic types compressed forms are used.

Particular examples of interest: bool - 1 byte encoding uints - Direct encoding Length prefixing (for any container implemented by default) - 8 byte encoding Elliptic curves - compressed point encoding

fn serialized_size(&self) -> usize[src]

Loading content...

Provided methods

fn serialize_uncompressed<W: Write>(
    &self,
    writer: W
) -> Result<(), SerializationError>
[src]

Serializes self into writer without compression.

fn serialize_unchecked<W: Write>(
    &self,
    writer: W
) -> Result<(), SerializationError>
[src]

Serializes self into writer without compression, and without performing validity checks. Should be used only when there is no danger of adversarial manipulation of the output.

fn uncompressed_size(&self) -> usize[src]

Loading content...

Implementations on Foreign Types

impl CanonicalSerialize for String[src]

impl<T: CanonicalSerialize> CanonicalSerialize for Vec<T>[src]

impl<T> CanonicalSerialize for PhantomData<T>[src]

impl<'a, T: CanonicalSerialize + ToOwned> CanonicalSerialize for Cow<'a, T>[src]

impl<T: CanonicalSerialize> CanonicalSerialize for Option<T>[src]

impl<T: CanonicalSerialize> CanonicalSerialize for Rc<T>[src]

impl<K, V> CanonicalSerialize for BTreeMap<K, V> where
    K: CanonicalSerialize,
    V: CanonicalSerialize
[src]

impl<T: CanonicalSerialize> CanonicalSerialize for BTreeSet<T>[src]

Loading content...

Implementors

impl CanonicalSerialize for ()[src]

impl CanonicalSerialize for bool[src]

impl CanonicalSerialize for u8[src]

impl CanonicalSerialize for u16[src]

impl CanonicalSerialize for u32[src]

impl CanonicalSerialize for u64[src]

impl CanonicalSerialize for usize[src]

impl<A, B> CanonicalSerialize for (A, B) where
    A: CanonicalSerialize,
    B: CanonicalSerialize
[src]

impl<A, B, C> CanonicalSerialize for (A, B, C) where
    A: CanonicalSerialize,
    B: CanonicalSerialize,
    C: CanonicalSerialize
[src]

impl<A, B, C, D> CanonicalSerialize for (A, B, C, D) where
    A: CanonicalSerialize,
    B: CanonicalSerialize,
    C: CanonicalSerialize,
    D: CanonicalSerialize
[src]

impl<T: CanonicalSerialize> CanonicalSerialize for [T][src]

Loading content...