gnostr_sha256/
lib.rs

1use sha256::{digest};
2use std::error::Error;
3use std::process;
4
5pub struct Config {
6    pub query: String,
7}
8
9pub fn print_type_of<T>(_: &T) -> String {
10    format!("{}", std::any::type_name::<T>())
11}
12
13impl Config {
14
15    pub fn build(args: &[String]) -> Result<Config, &'static str> {
16
17        if args.len() == 1 {
18
19            println!("{}", digest("".to_string()));
20            process::exit(0);
21
22        }
23
24        let query = args[1].clone();
25        Ok(Config { query })
26    }
27}
28pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
29    println!("{}", digest(config.query));
30    Ok(())
31}
32pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
33let mut results = Vec::new();
34    for line in contents.lines() {
35        // do something with line
36        println!("{}", line);
37        if line.contains(query) {
38            // do something with line
39            let val = digest(query);
40            println!("{}", val);
41            results.push(line);
42        }
43    }
44    results
45}
46
47#[cfg(test)]
48mod tests {
49    use super::*;
50
51    #[test]
52    fn one_result() {
53        let query = "duct";
54        let contents = "\
55Rust:
56safe, fast, productive.
57Pick three.";
58
59        assert_eq!(vec!["safe, fast, productive."], search(query, contents));
60    }
61    #[test]
62    fn one_query() {
63        let query = digest("");
64        let contents = "\
65e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
66
67        assert_eq!(vec!["e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"], search(&query, contents));
68    }
69    #[test]
70    #[should_panic]
71    fn panic_query() {
72        let query = digest("");
73        let contents = "\
74e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 ";
75
76        assert_eq!(vec!["e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"], search(&query, contents));
77    }
78}
79
80//#[cfg(debug_assertions)]
81//let cloned_query = query.clone();
82//#[cfg(debug_assertions)]
83//println!("{:?}", print_type_of(&query));
84//#[cfg(debug_assertions)]
85//println!("{:?}", print_type_of(&cloned_query));
86//println!("{:?}", query);
87//#[cfg(debug_assertions)]
88//let s = &"hello world".to_string();
89//#[cfg(debug_assertions)]
90//let cloned_s = s.clone();
91//#[cfg(debug_assertions)]
92//println!("{:?}", print_type_of(&s));
93//#[cfg(debug_assertions)]
94//println!("{:?}", print_type_of(&cloned_s));