# Development Tasks
## Core Components
- [x] Implement the `Vu64` struct with `length` and `bytes` fields.
- [x] Implement `AsRef<[u8]>` for the `Vu64` struct.
## Encoding & Decoding
- [x] Implement the `encode(value: u64) -> Vu64` function.
- [x] Implement the `decode(bytes: &[u8]) -> Result<u64, Error>` function.
- [x] Implement `encoded_len` function using a lookup table for performance.
- [x] Implement `decoded_len` function to determine length from the first byte.
## Signed Integers (`signed` module)
- [x] Create the `signed` module.
- [x] Implement `signed::zigzag::encode(value: i64) -> u64`.
- [x] Implement `signed::zigzag::decode(encoded: u64) -> i64`.
- [x] Implement `signed::encode(value: i64) -> Vu64`.
- [x] Implement `signed::decode(bytes: &[u8]) -> Result<i64, Error>`.
## I/O Integration (`io` feature)
- [x] Create the `io` module, conditionally compiled with the `io` feature.
- [x] Define the `ReadVu64` trait extending `std::io::Read`.
- [x] Define the `WriteVu64` trait extending `std::io::Write`.
- [x] Implement `read_and_decode_vu64` and `read_and_decode_vi64` for the `ReadVu64` trait.
- [x] Implement `encode_and_write_vu64` and `encode_and_write_vi64` for the `WriteVu64` trait.
## Error Handling
- [x] Define the `Error` enum with variants: `Truncated` and `RedundantEncode`.
- [x] Implement the `std::error::Error` trait for the `Error` enum.
## Project Structure & Dependencies
- [x] Organize the code into `lib.rs`, `io.rs`, and `signed.rs`.
- [x] Ensure the library has no external dependencies.
## Testing
- [x] Write comprehensive unit tests for all encoding, decoding, and I/O functionalities.