Skip to content

Instantly share code, notes, and snippets.

@DarkFenX
Created January 28, 2023 16:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DarkFenX/9190e52f37ee432815a26e8df14cda77 to your computer and use it in GitHub Desktop.
Save DarkFenX/9190e52f37ee432815a26e8df14cda77 to your computer and use it in GitHub Desktop.
/// Add new data source with custom alias, and optionally make it default.
pub fn add(
&self,
alias: &str,
data_handler: Box<dyn DataHandler>,
mut cache_handler: Box<dyn CacheHandler>,
make_default: bool,
callback: Option<mpsc::Sender<SrcAddStatus>>,
) -> Result<()> {
log::info!("adding source with alias \"{}\", default={}", alias, make_default);
log::info!("using {:?} as data handler", data_handler);
log::info!("using {:?} as cache handler", cache_handler);
if self.exists(alias) {
if callback.is_some() {
callback.as_ref().unwrap().send(SrcAddStatus::Done).unwrap();
}
return Err(Error::new(format!("source with alias \"{}\" already exists", alias)));
}
self.lock_alias(alias);
let dv = get_data_version(&data_handler);
if need_cache_regen(dv.clone(), &mut cache_handler) {
if callback.is_some() {
callback.as_ref().unwrap().send(SrcAddStatus::Regenerating).unwrap();
}
let ch_data = regen_cache(&data_handler).map_err(|e| {
self.unlock_alias(alias);
e
})?;
update_cache(dv, &mut cache_handler, ch_data);
}
self.add_source(alias, cache_handler, make_default);
self.unlock_alias(alias);
if callback.is_some() {
callback.as_ref().unwrap().send(SrcAddStatus::Done).unwrap();
}
Ok(())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment