Byte Sequences

This crate provides some utility to create byte sequences like ApiKeys or SessionIds. It contains a macro that lets you specify the name and length in bytes of the sequence. The macro than creates a struct that has following methods

```rust

fn generate_new() -> Self

fn to_string() -> String

fn check(key: &str) -> std::result::Result;

```

It also implements Display, Debug, serde::Serialize, serde::Deserialize, PartialOrd, Ord, PartialEq, Eq, Clone, Copy and Hash;

Complete example:

```rust

[macro_use]

extern crate bytesequence; extern crate rand; use serde; use std; use bytesequence::Checkable;

byte_seq!(ApiKey; 32);

[test]

fn example() { // Creates a new ApiKey containing 32 random bytes using a threadrng let key = ApiKey::generatenew();

// The to_string method creates a hex encoded string:
// i.e. 'BBC47F308F3D02C3C6C3D6C9555296A64407FE72AD92DE8C7344D610CFFABF67'
assert_eq!(key.to_string().len(), 64);

// you can also do it the other way around: Parse a string into an ApiKey
let key = ApiKey::check("BBC47F308F3D02C3C6C3D6C9555296A64407FE72AD92DE8C7344D610CFFABF67").unwrap();
assert_eq!(key.to_string(), "BBC47F308F3D02C3C6C3D6C9555296A64407FE72AD92DE8C7344D610CFFABF67");

}

```

You can also extend the generated structs. For example add a public part of the ApiKey:

rust impl ApiKey { pub fn public_part(&self) -> PublicApiKey { let mut pub_data = [0u8; 8]; pub_data.copy_from_slice(&self.0[0..8]); PublicApiKey(pub_data) } }