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() -> TypeIdwhere 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.

Implementations on Foreign Types§

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<T> Versionize for [T; 27]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 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 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<T> Versionize for [T; 19]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 for [T; 15]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 for [T; 11]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 for [T; 12]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 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<T> Versionize for [T; 5]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 for FamStructWrapper<T>where <T as FamStruct>::Entry: Versionize, T: Debug + Default + FamStruct + 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 [T; 26]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 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 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 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<T> Versionize for [T; 20]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 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 [T; 30]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 for [T; 7]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 for [T; 22]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 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<T> Versionize for [T; 14]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 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 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<T> Versionize for [T; 31]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 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<T> Versionize for [T; 17]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 for [T; 4]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 for [T; 23]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 for [T; 16]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 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 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<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 [T; 1]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 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 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<T> Versionize for [T; 25]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 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<T> Versionize for [T; 29]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 for [T; 8]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 for [T; 3]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 for [T; 6]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 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 [T; 13]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 for [T; 28]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 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<T> Versionize for [T; 18]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 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<T> Versionize for [T; 21]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

source§

impl<T> Versionize for [T; 24]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 for [T; 2]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 for [T; 32]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 for [T; 10]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 for [T; 9]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

Implementors§