| use std::error::Error; |
| use std::fs; |
| |
| pub struct Config { |
| pub query: String, |
| pub filename: String, |
| } |
| |
| impl Config { |
| pub fn new(args: &[String]) -> Result<Config, &'static str> { |
| if args.len() < 3 { |
| return Err("not enough arguments"); |
| } |
| |
| let query = args[1].clone(); |
| let filename = args[2].clone(); |
| |
| Ok(Config { query, filename }) |
| } |
| } |
| |
| pub fn run(config: Config) -> Result<(), Box<dyn Error>> { |
| let contents = fs::read_to_string(config.filename)?; |
| |
| Ok(()) |
| } |
| |
| // ANCHOR: here |
| pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { |
| vec![] |
| } |
| // ANCHOR_END: here |
| |
| #[cfg(test)] |
| mod tests { |
| use super::*; |
| |
| #[test] |
| fn one_result() { |
| let query = "duct"; |
| let contents = "\ |
| Rust: |
| safe, fast, productive. |
| Pick three."; |
| |
| assert_eq!(vec!["safe, fast, productive."], search(query, contents)); |
| } |
| } |
| |
| fn main() {} |