doip-codec 2.0.2

Diagnostics over Internet Protocol codec for client-server communication.
Documentation
# Diagnostics over Internet Protocol (DoIP) Codec

The `doip-codec` crate provides a `Encoder` and `Decoder` implementation for encoding and decoding Diagnostics Over Internet Protocol (DoIP) messages. It is designed to integrate seamlessly with the Tokio ecosystem, leveraging `tokio-util`'s `Framed` for efficient stream-based reading and writing of DoIP messages.

## Features

- Full support for encoding and decoding DoIP messages as per the ISO 13400 standard.
- Easy integration with Tokio's asynchronous I/O framework.
- Robust and efficient handling of DoIP message framing.
- Customizable for various DoIP use cases, including vehicle diagnostics and testing.

## Installation

Add the following to your `Cargo.toml`:

```toml
[dependencies]
doip-codec = "1.0.0"
```

Then, include the crate in your code:

```rust
use doip_codec::DoipCodec;
```

## Usage

Here's a simple example to get started with `DoipCodec`:

```rust
use futures::{SinkExt, StreamExt};
use tokio::net::TcpStream;
use tokio_util::codec::Framed;
use doip_definitions::{
    header::DoipVersion,
    message::{DoipMessage, VehicleIdentificationRequest},
};
use doip_codec::DoipCodec;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
  // Connect to a DoIP server
  let stream = TcpStream::connect("127.0.0.1:13400").await?;

  // Wrap the stream with the DoipCodec
  let mut framed = Framed::new(stream, DoipCodec);

  // Send a DoIP message
  let request = DoipMessage::new(
      DoipVersion::Iso13400_2012,
      Box::new(VehicleIdentificationRequest {}),
  ); // Example payload

  framed.send(request).await?;

  // Receive a DoIP message
  if let Some(response) = framed.next().await {
      match response {
          Ok(msg) => println!("Received message: {:?}", msg),
          Err(e) => eprintln!("Failed to decode message: {}", e),
      }
  }

  Ok(())
}
```

## Documentation

Comprehensive API documentation is available on [docs.rs](https://docs.rs/doip-codec/).

## Why DoIP?

Diagnostics Over Internet Protocol (DoIP) is a modern diagnostic communication protocol that leverages IP-based networks for vehicle diagnostics, making it a critical component in automotive software. The `doip-codec` crate simplifies the implementation of DoIP messaging for Rust developers.

## Contributing

Contributions are welcome! Feel free to open issues, submit pull requests, or suggest features. Please follow the [Rust Code of Conduct](https://www.rust-lang.org/policies/code-of-conduct) when contributing.

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.