Versionize

Trait Versionize 

Source
pub trait Versionize {
    // Required methods
    fn serialize<W: Write>(
        &self,
        writer: &mut W,
        version_map: &VersionMap,
        target_version: u16,
    ) -> VersionizeResult<()>;
    fn deserialize<R: Read>(
        reader: &mut R,
        version_map: &VersionMap,
        source_version: u16,
    ) -> VersionizeResult<Self>
       where Self: Sized;
    fn version() -> u16;

    // Provided method
    fn type_id() -> TypeId
       where Self: 'static { ... }
}
Expand description

Trait that provides an interface for version aware serialization and deserialization. The Versionize proc macro can generate an implementation for a given type if generics are not used, otherwise a manual implementation is required.

Example implementation

extern crate versionize;
extern crate versionize_derive;
use versionize::{VersionMap, Versionize, VersionizeResult};
use versionize_derive::Versionize;

struct MyType<T>(T);

impl<T> Versionize for MyType<T>
where
    T: Versionize,
{
    #[inline]
    fn serialize<W: std::io::Write>(
        &self,
        writer: &mut W,
        version_map: &VersionMap,
        app_version: u16,
    ) -> VersionizeResult<()> {
        self.0.serialize(writer, version_map, app_version)
    }

    #[inline]
    fn deserialize<R: std::io::Read>(
        reader: &mut R,
        version_map: &VersionMap,
        app_version: u16,
    ) -> VersionizeResult<Self> {
        Ok(MyType(T::deserialize(reader, version_map, app_version)?))
    }

    fn version() -> u16 {
        1
    }
}

Required Methods§

Source

fn serialize<W: Write>( &self, writer: &mut W, version_map: &VersionMap, target_version: u16, ) -> VersionizeResult<()>

Serializes self to target_verion using the specficifed writer and version_map.

Source

fn deserialize<R: Read>( reader: &mut R, version_map: &VersionMap, source_version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Returns a new instance of Self by deserializing from source_version using the specficifed reader and version_map.

Source

fn version() -> u16

Returns latest Self version number.

Provided Methods§

Source

fn type_id() -> TypeId
where Self: 'static,

Returns the Self type id. The returned ID represents a globally unique identifier for a type. It is required by the VersionMap implementation.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Versionize for bool

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for char

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for f32

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for f64

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for i8

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for i16

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for i32

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for i64

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for i128

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for isize

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for u8

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for u16

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for u32

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for u64

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for u128

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for usize

Source§

fn serialize<W: Write>( &self, writer: &mut W, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, _version_map: &VersionMap, _version: u16, ) -> VersionizeResult<Self>
where Self: Sized,

Source§

fn version() -> u16

Source§

impl Versionize for String

Source§

fn serialize<W: Write>( &self, writer: &mut W, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<Self>

Source§

fn version() -> u16

Source§

impl<T> Versionize for Option<T>
where T: Versionize,

Source§

fn serialize<W: Write>( &self, writer: &mut W, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<Self>

Source§

fn version() -> u16

Source§

impl<T> Versionize for Box<T>
where T: Versionize,

Source§

fn serialize<W: Write>( &self, writer: &mut W, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<Self>

Source§

fn version() -> u16

Source§

impl<T> Versionize for Vec<T>
where T: Versionize,

Source§

fn serialize<W: Write>( &self, writer: &mut W, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<Self>

Source§

fn version() -> u16

Source§

impl<T> Versionize for Wrapping<T>
where T: Versionize,

Source§

fn serialize<W: Write>( &self, writer: &mut W, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<Self>

Source§

fn version() -> u16

Source§

impl<T> Versionize for FamStructWrapper<T>

Source§

fn serialize<W: Write>( &self, writer: &mut W, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<Self>

Source§

fn version() -> u16

Source§

impl<T, const N: usize> Versionize for [T; N]
where T: Copy + Default + Versionize,

Source§

fn serialize<W: Write>( &self, writer: &mut W, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<Self>

Source§

fn version() -> u16

Source§

impl<T: Versionize, U: Versionize> Versionize for (T, U)

Source§

fn serialize<W: Write>( &self, writer: &mut W, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<()>

Source§

fn deserialize<R: Read>( reader: &mut R, version_map: &VersionMap, app_version: u16, ) -> VersionizeResult<Self>

Source§

fn version() -> u16

Implementors§