rustecal-pubsub 0.1.8

Publish/Subscribe API for Eclipse eCAL
# rustecal-pubsub


`rustecal-pubsub` provides a high-level, type-safe Publisher/Subscriber API on top of eCAL’s raw FFI and Core API, enabling Rust applications to send and receive structured messages with minimal boilerplate.

## Features


- **Untyped Pub/Sub** for raw buffers when needed
- **Typed Pub/Sub** via `TypedPublisher<T>` and `TypedSubscriber<T>`
- **Support for arbitrary message types** implementing the `PublisherMessage` and `SubscriberMessage` traits
- **Metadata propagation**: topics carry encoding, type name, and optional descriptor

## Requirements


- **Rust** 1.60 or later  
- **Eclipse eCAL** C/C++ library v6.0 or later installed and accessible on your system

## Installation


Add to your `Cargo.toml`:

```toml
[dependencies]
rustecal-pubsub = "0.1"
```

## Quickstart


### Typed Publisher Example


```rust
use rustecal::{Ecal, EcalComponents, TypedPublisher};
use rustecal_types_string::StringMessage;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    Ecal::initialize(Some("string publisher"), EcalComponents::DEFAULT, None)?;

    let publisher = TypedPublisher::<StringMessage>::new("hello")?;

    while Ecal::ok() {
        let message = StringMessage { data: "Hello from Rust".into() };
        publisher.send(&message, Timestamp::Auto);

        std::thread::sleep(std::time::Duration::from_millis(500));
    }

    Ecal::finalize();
    Ok(())
}
```

### Typed Subscriber Example


```rust
use rustecal::{Ecal, EcalComponents, TypedSubscriber};
use rustecal_types_string::StringMessage;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    Ecal::initialize(Some("string subscriber"), EcalComponents::DEFAULT, None)?;

    let mut subscriber = TypedSubscriber::<StringMessage>::new("hello")?;
    subscriber.set_callback(|message| {
        println!("Received: {}", message.payload.data)
    });

    while Ecal::ok() {
        std::thread::sleep(std::time::Duration::from_millis(500));
    }

    Ecal::finalize();
    Ok(())
}
```

## Traits Reference


- `PublisherMessage`: Defines `datatype()` and `to_bytes()` for a message type.
- `SubscriberMessage`: Defines `datatype()` and `from_bytes()` for reconstructing a message.

Implement these traits to integrate custom types or leverage helper crates like `rustecal-types-protobuf` or `rustecal-types-serde`.

## Advanced Usage


- Untyped Pub/Sub: Use `rustecal_pubsub::Publisher` and `Subscriber` for raw buffers.
- Metadata Inspection: Retrieve topic metadata via `get_data_type_information()`.
- Message-format support: Combine with `rustecal-types-bytes`, `rustecal-types-string`, `rustecal-types-protobuf` for Bytes, String, and Protobuf.
- Message-format support: Combine with `rustecal-types-serde` for JSON, CBOR, and MessagePack.

For more examples, see the `rustecal-samples/pubsub`.