versionneer 0.3.0

Version handling for serialization and deserialization
Documentation
# versionneer ![Build Status] [![Latest Version]][crates.io] [![codecov]][codecov report]

[Build Status]: https://github.com/Licenser/versionneer/workflows/Rust/badge.svg
[Latest Version]: https://img.shields.io/crates/v/versionneer.svg
[crates.io]: https://crates.io/crates/versionneer
[codecov]: https://codecov.io/gh/Licenser/versionneer/branch/main/graph/badge.svg
[codecov report]: https://codecov.io/gh/Licenser/versionneer

A simple version management crate for encoded data that allows for simple versioning and upgrading of data structures.

```rust
   use versionneer::{versioned, Encodable, Decodable, bincode, Upgrade};

   #[derive(Debug, thiserror::Error)]
   enum Error {
       #[error("Invalid version: {0}")]
       InvalidVersion(u32),
       #[error(transparent)]
       Decode(#[from] ::bincode::error::DecodeError),
       #[error(transparent)]
       Encoder(#[from] ::bincode::error::EncodeError),
   }
   impl versionneer::Error for Error {
       fn invalid_version(version: u32) -> Self {
           Self::InvalidVersion(version)
       }
   }

   #[derive(Debug, PartialEq, Eq, ::bincode::Decode, ::bincode::Encode)]
   struct TestV0 {
       data: u8,
   }
   versioned!(TestV0, 0, Error);

   #[derive(Debug, PartialEq, Eq, ::bincode::Decode, ::bincode::Encode)]
   struct TestV1 {
       data: u16,
   }
   versioned!(TestV1, 1, Error);

   impl TryFrom<TestV0> for TestV1 {
       type Error = Error;
       fn try_from(value: TestV0) -> Result<Self, Self::Error> {
           Ok(TestV1 { data: u16::from(value.data) })
       }
   }

   type Latest = Upgrade<TestV1, TestV0, Error>;
   let mut data = Vec::new();
   let mut enc = bincode::Encoder::new(&mut data);
   let test = TestV0 { data: 42 };
   TestV0::encode(&test, &mut enc).expect("Failed to encode");
   let mut reader = data.as_slice();
   let mut dec = bincode::Decoder::new(&mut reader);
   let decoded = Latest::decode(&mut dec).expect("Failed to decode");
   assert_eq!(decoded, TestV1 { data: 42 });
```