Skip to main content

Subscriber

Trait Subscriber 

Source
pub trait Subscriber: Send + Sync {
    // Required methods
    fn name(&self) -> &'static str;
    fn emit(
        &self,
        event: &Event,
        vars: &dyn Fn(&str) -> Option<String>,
    ) -> Option<Delivery>;
}
Expand description

A destination for events (Rails’ event subscribers): turns an Event into the request to send.

vars looks up a Worker variable or secret by name. Return None to send nothing, e.g. for events it ignores.

§Examples

use ocre::events::{Delivery, Event, Subscriber};

/// Posts every `order.*` event to an analytics endpoint.
struct Analytics;

impl Subscriber for Analytics {
    fn name(&self) -> &'static str {
        "analytics"
    }

    fn emit(&self, event: &Event, vars: &dyn Fn(&str) -> Option<String>) -> Option<Delivery> {
        if !event.name.starts_with("order.") {
            return None;
        }
        let body = serde_json::json!({ "event": event.name, "properties": event.payload }).to_string();
        Some(Delivery { url: vars("ANALYTICS_URL")?, headers: vec![("content-type".into(), "application/json".into())], body })
    }
}

ocre::events::subscribe(Analytics);

Required Methods§

Source

fn name(&self) -> &'static str

A short name, for failure logs: analytics.

Source

fn emit( &self, event: &Event, vars: &dyn Fn(&str) -> Option<String>, ) -> Option<Delivery>

The request to send for event, if any.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§