diff options
Diffstat (limited to 'src/commands/core/mod.rs')
-rw-r--r-- | src/commands/core/mod.rs | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/src/commands/core/mod.rs b/src/commands/core/mod.rs index f212880..74e2852 100644 --- a/src/commands/core/mod.rs +++ b/src/commands/core/mod.rs @@ -1,20 +1,23 @@ mod actor; mod extractor; +use crate::clients::cheatsh; +use crate::config::Source; +use crate::filesystem; use crate::finder::structures::Opts as FinderOpts; use crate::parser::Parser; use crate::prelude::*; +use crate::structures::fetcher::{Fetcher, StaticFetcher}; use crate::welcome; -pub fn main() -> Result<()> { +pub fn init(fetcher: Box<dyn Fetcher>) -> Result<()> { let config = &CONFIG; let opts = FinderOpts::snippet_default(); + // let fetcher = config.fetcher(); let (raw_selection, (variables, files)) = config .finder() .call(opts, |writer| { - let fetcher = config.fetcher(); - let mut parser = Parser::new(writer, true); let found_something = fetcher @@ -32,10 +35,38 @@ pub fn main() -> Result<()> { let extractions = extractor::extract_from_selections(&raw_selection, config.best_match()); if extractions.is_err() { - return main(); + return init(fetcher); } actor::act(extractions, files, variables)?; Ok(()) } + +pub fn get_fetcher() -> Result<Box<dyn Fetcher>> { + match CONFIG.source() { + Source::Cheats(query) => { + let lines = cheatsh::call(&query)?; + let fetcher = Box::new(StaticFetcher::new(lines)); + Ok(fetcher) + } + Source::Tldr(query) => { + let lines = cheatsh::call(&query)?; + let fetcher = Box::new(StaticFetcher::new(lines)); + Ok(fetcher) + } + Source::Filesystem(path) => { + let fetcher = Box::new(filesystem::Fetcher::new(path)); + Ok(fetcher) + } + Source::Welcome => { + let fetcher = Box::new(welcome::Fetcher::new()); + Ok(fetcher) + } + } +} + +pub fn main() -> Result<()> { + let fetcher = get_fetcher()?; + init(fetcher) +} |