bazzar/crates/search_manager/src/context.rs
2022-11-05 19:04:38 +01:00

41 lines
1.3 KiB
Rust

use std::sync::{Arc, Mutex};
use config::SharedAppConfig;
use sonic_channel::SonicChannel;
#[derive(Clone)]
pub struct Context {
pub search: Arc<Mutex<sonic_channel::SearchChannel>>,
pub ingest: Arc<Mutex<sonic_channel::IngestChannel>>,
}
impl Context {
pub fn new(config: SharedAppConfig) -> Option<Self> {
let enabled = config.lock().search().search_active();
if enabled {
let search = {
let l = config.lock();
sonic_channel::SearchChannel::start(
l.search().sonic_search_addr(),
l.search().sonic_search_pass(),
)
.unwrap_or_else(|e| panic!("Failed to connect to sonic search channel. {}", e))
};
let ingest = {
let l = config.lock();
sonic_channel::IngestChannel::start(
l.search().sonic_ingest_addr(),
l.search().sonic_ingest_pass(),
)
.unwrap_or_else(|e| panic!("Failed to connect to sonic ingest channel. {}", e))
};
Some(Self {
search: Arc::new(Mutex::new(search)),
ingest: Arc::new(Mutex::new(ingest)),
})
} else {
None
}
}
}