feat: extensible search engine with person entities (FTS5/tsvector)

This commit is contained in:
2026-05-12 18:45:24 +02:00
parent 763d622601
commit c6770659c5
45 changed files with 2421 additions and 86 deletions

View File

@@ -15,26 +15,35 @@ pub struct NatsConfig {
impl NatsConfig {
pub fn from_env() -> anyhow::Result<Self> {
let url = std::env::var("NATS_URL")
.map_err(|_| anyhow::anyhow!("NATS_URL is not set"))?;
Self::from_vars(
std::env::var("NATS_URL").ok().as_deref(),
std::env::var("NATS_MODE").ok().as_deref(),
std::env::var("NATS_SUBJECT_PREFIX").ok().as_deref(),
std::env::var("NATS_STREAM_NAME").ok().as_deref(),
std::env::var("NATS_CONSUMER_NAME").ok().as_deref(),
)
}
let mode = match std::env::var("NATS_MODE")
.unwrap_or_else(|_| "jetstream".to_string())
.as_str()
{
pub(crate) fn from_vars(
url: Option<&str>,
mode: Option<&str>,
subject_prefix: Option<&str>,
stream_name: Option<&str>,
consumer_name: Option<&str>,
) -> anyhow::Result<Self> {
let url = url.ok_or_else(|| anyhow::anyhow!("NATS_URL is not set"))?;
let mode = match mode.unwrap_or("jetstream") {
"core" => NatsMode::Core,
"jetstream" => NatsMode::JetStream,
other => anyhow::bail!("unknown NATS_MODE: {other}"),
};
let subject_prefix = std::env::var("NATS_SUBJECT_PREFIX")
.unwrap_or_else(|_| "movies-diary.events".to_string());
let stream_name = std::env::var("NATS_STREAM_NAME")
.unwrap_or_else(|_| "MOVIES_DIARY_EVENTS".to_string());
let consumer_name = std::env::var("NATS_CONSUMER_NAME")
.unwrap_or_else(|_| "worker".to_string());
let subject_prefix = subject_prefix.unwrap_or("movies-diary.events").to_string();
let stream_name = stream_name.unwrap_or("MOVIES_DIARY_EVENTS").to_string();
let consumer_name = consumer_name.unwrap_or("worker").to_string();
Ok(Self { url, mode, subject_prefix, stream_name, consumer_name })
Ok(Self { url: url.to_string(), mode, subject_prefix, stream_name, consumer_name })
}
}