refactor(nats): strip NatsEventPublisher, add NatsTransport implementing Transport
This commit is contained in:
@@ -6,6 +6,7 @@ edition = "2021"
|
||||
[dependencies]
|
||||
domain = { workspace = true }
|
||||
event-payload = { workspace = true }
|
||||
event-publisher = { workspace = true }
|
||||
async-nats = { workspace = true }
|
||||
async-stream = { workspace = true }
|
||||
serde_json = { workspace = true }
|
||||
|
||||
@@ -2,36 +2,33 @@ use async_trait::async_trait;
|
||||
use domain::{
|
||||
errors::DomainError,
|
||||
events::{DomainEvent, EventEnvelope},
|
||||
ports::{EventConsumer, EventPublisher},
|
||||
ports::EventConsumer,
|
||||
};
|
||||
use event_payload::EventPayload;
|
||||
use event_publisher::Transport;
|
||||
use futures::stream::BoxStream;
|
||||
|
||||
// ── NatsEventPublisher ────────────────────────────────────────────────────
|
||||
// ── NatsTransport — raw NATS publish backend ────────────────────────────────
|
||||
|
||||
pub struct NatsEventPublisher {
|
||||
pub struct NatsTransport {
|
||||
client: async_nats::Client,
|
||||
}
|
||||
|
||||
impl NatsEventPublisher {
|
||||
impl NatsTransport {
|
||||
pub fn new(client: async_nats::Client) -> Self { Self { client } }
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl EventPublisher for NatsEventPublisher {
|
||||
async fn publish(&self, event: &DomainEvent) -> Result<(), DomainError> {
|
||||
let payload = EventPayload::from(event);
|
||||
let subject = payload.subject();
|
||||
let bytes = serde_json::to_vec(&payload)
|
||||
.map_err(|e| DomainError::Internal(e.to_string()))?;
|
||||
impl Transport for NatsTransport {
|
||||
async fn publish_bytes(&self, subject: &str, bytes: &[u8]) -> Result<(), DomainError> {
|
||||
self.client
|
||||
.publish(subject, bytes.into())
|
||||
.publish(subject.to_string(), bytes.to_vec().into())
|
||||
.await
|
||||
.map_err(|e| DomainError::Internal(e.to_string()))
|
||||
}
|
||||
}
|
||||
|
||||
// ── NatsEventConsumer ─────────────────────────────────────────────────────
|
||||
// ── NatsEventConsumer — subscribes and yields EventEnvelopes ────────────────
|
||||
|
||||
pub struct NatsEventConsumer {
|
||||
client: async_nats::Client,
|
||||
@@ -66,7 +63,6 @@ impl EventConsumer for NatsEventConsumer {
|
||||
continue;
|
||||
}
|
||||
};
|
||||
// Basic NATS: no ack/nack (at-most-once delivery)
|
||||
yield EventEnvelope {
|
||||
event,
|
||||
ack: Box::new(|| {}),
|
||||
|
||||
Reference in New Issue
Block a user