event-publisher, export, rss, media-server, object-storage, nats(config).
Kept inline (private fn, no public path): nats src/subject.rs
tests::{review_logged_subject,review_updated_subject,movie_discovered_subject,
consumer_subject_filter_appends_wildcard} - event_to_subject/consumer_subject_filter private.
object-storage build_local_store tests rewritten via StorageConfig::from_config.
38 lines
961 B
Rust
38 lines
961 B
Rust
#[derive(Debug, Clone, Copy, PartialEq)]
|
|
pub enum NatsMode {
|
|
Core,
|
|
JetStream,
|
|
}
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub struct NatsConfig {
|
|
pub url: String,
|
|
pub mode: NatsMode,
|
|
pub subject_prefix: String,
|
|
pub stream_name: String,
|
|
pub consumer_name: String,
|
|
}
|
|
|
|
impl NatsConfig {
|
|
pub fn from_config(config: &::config::NatsConfig) -> anyhow::Result<Self> {
|
|
let url = config
|
|
.url
|
|
.clone()
|
|
.ok_or_else(|| anyhow::anyhow!("NATS_URL is not set"))?;
|
|
|
|
let mode = match config.mode.as_str() {
|
|
"core" => NatsMode::Core,
|
|
"jetstream" => NatsMode::JetStream,
|
|
other => anyhow::bail!("unknown NATS_MODE: {other}"),
|
|
};
|
|
|
|
Ok(Self {
|
|
url,
|
|
mode,
|
|
subject_prefix: config.subject_prefix.clone(),
|
|
stream_name: config.stream_name.clone(),
|
|
consumer_name: config.consumer_name.clone(),
|
|
})
|
|
}
|
|
}
|