Very simple library for binary serialization/deserialization.

Example simple serialization:

	struct Sample {
		field1: u64,
		field2: u64,
		field3: u64,
		field4: u64,
		field5: u64,
	}

	impl TryInto<[u8; 14]> for Sample {
		type Error = Vec<&'static str>;

		fn try_into(self) -> Result<[u8; 14], Self::Error> {
			let b_field1 = self.field1.to_be_bytes();
			let b_field2 = self.field2.to_be_bytes();
			let b_field3 = self.field3.to_be_bytes();
			let b_field4 = self.field4.to_be_bytes();
			let b_field5 = self.field5.to_be_bytes();

			let mut errors = vec![];
			if !is_in_range(6, &b_field1, b_field1.len()) {
				errors.push("field1");
			}
			if !is_in_range(32, &b_field2, b_field2.len()) {
				errors.push("field2");
			}
			if !is_in_range(4, &b_field3, b_field3.len()) {
				errors.push("field3");
			}
			if !is_in_range(64, &b_field4, b_field4.len()) {
				errors.push("field4");
			}
			if !is_in_range(6, &b_field5, b_field5.len()) {
				errors.push("field5");
			}

			if !errors.is_empty() {
				return Err(errors);
			}

			let mut target = [0u8; 14];
			let mut offset = 0;

			bit_write(&mut target, offset, 6, &b_field1, b_field1.len());
			offset += 6;

			bit_write(&mut target, offset, 32, &b_field2, b_field2.len());
			offset += 32;

			bit_write(&mut target, offset, 4, &b_field3, b_field3.len());
			offset += 4;

			bit_write(&mut target, offset, 64, &b_field4, b_field4.len());
			offset += 64;

			bit_write(&mut target, offset, 6, &b_field5, b_field5.len());

			Ok(target)
		}
	}