re_cdr 0.1.0

CDR (Common Data Representation) encoding and decoding for ROS 2 / DDS messages
Documentation
# re_cdr

CDR (Common Data Representation) codec for ROS 2 / DDS messages.

`re_cdr` decodes and encodes CDR.

It is aimed at ROS 2 reflection: decoding messages whose layout is only known at runtime, as when reading MCAP.
Inspired by [`cdr-encoding`](https://github.com/Atostek/cdr-encoding) and [`hiroz-cdr`](https://github.com/ZettaScaleLabs/hiroz/tree/main/crates/hiroz-cdr).

## API

`CdrSerializer` and `CdrDeserializer` integrate with serde for static Rust types.

`CdrReader` and `CdrWriter` read and write aligned primitives for runtime schemas. `CdrReader::read_numeric_vec` handles numeric arrays (`float32[]`, `uint32[]`, ...), using a byte-copy path when the message byte order matches the host and per-element reads otherwise.

Readers and writers are generic over `byteorder::ByteOrder`. Choose `LittleEndian` or `BigEndian` from the message encapsulation header.

## Usage

### Static types

```rust
use re_cdr::{from_bytes, to_vec, LittleEndian};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct Vector3 { x: f64, y: f64, z: f64 }

let v = Vector3 { x: 1.0, y: 2.0, z: 3.0 };

let bytes = to_vec::<Vector3, LittleEndian>(&v).unwrap();
let (decoded, consumed) = from_bytes::<Vector3, LittleEndian>(&bytes).unwrap();

assert_eq!(decoded, v);
assert_eq!(consumed, bytes.len());
```

## License

Apache-2.0 or MIT