oct 0.36.2

Octonary transcodings.
Documentation
Both [`Serialise`] and [`Deserialise`] can be
derived for structures and enumerations:

[`Serialise`]: derive@oct::serdes::Serialise
[`Deserialise`]: derive@oct::serdes::Deserialise

```rust
use oct::serdes::{Deserialise, Serialise};

#[derive(Debug, Deserialise, PartialEq, Serialise)]
struct Struct0 {
	pub field0: char,
	pub field1: bool,
	pub field2: f64,
}

#[derive(Debug, Deserialise, PartialEq, Serialise)]
struct Struct1(pub i128);

#[derive(Debug, Deserialise, PartialEq, Serialise)]
struct Struct2;

#[derive(Debug, Deserialise, PartialEq, Serialise)]
enum Enum {
	Variant0 {
		field0: char,
		field1: bool,
		field2: f64,
	},

	Variant1(i128),

	Variant2,
}

const STRUCT0: Struct0 = Struct0 {
	field0: char::MAX,
	field1: true,
	field2: f64::MAX
};

const STRUCT1: Struct1 = Struct1(i128::MAX);

const STRUCT2: Struct2 = Struct2;

const ENUM_VARIANT0: Enum = Enum::Variant0 {
	field0: char::MAX,
	field1: true,
	field2: f64::MAX
};

const ENUM_VARIANT1: Enum = Enum::Variant1(i128::MAX);

const ENUM_VARIANT2: Enum = Enum::Variant2;

let mut buf = [0; 1024];

let mut output = buf.as_mut_slice();

STRUCT0.serialise(&mut output).unwrap();
STRUCT1.serialise(&mut output).unwrap();
STRUCT2.serialise(&mut output).unwrap();
ENUM_VARIANT0.serialise(&mut output).unwrap();
ENUM_VARIANT1.serialise(&mut output).unwrap();
ENUM_VARIANT2.serialise(&mut output).unwrap();

let mut input = buf.as_slice();

assert_eq!(Struct0::deserialise(&mut input).unwrap(), STRUCT0);
assert_eq!(Struct1::deserialise(&mut input).unwrap(), STRUCT1);
assert_eq!(Struct2::deserialise(&mut input).unwrap(), STRUCT2);
assert_eq!(Enum::deserialise(&mut input).unwrap(), ENUM_VARIANT0);
assert_eq!(Enum::deserialise(&mut input).unwrap(), ENUM_VARIANT1);
assert_eq!(Enum::deserialise(&mut input).unwrap(), ENUM_VARIANT2);
```

Untagged unions, however, cannot derive them:

```rust,compile_fail
use oct::io::{Deserialise, Serialise};

#[derive(Deserialise, Serialise)]
union Union {}
```