norris_jokes/
lib.rs

1#![doc = include_str!("../README.md")]
2
3pub mod joke;
4pub mod jokecategory;
5pub mod norriserror;
6mod requestor;
7mod requestor_async;
8
9use joke::{Joke, MultiJokes};
10use jokecategory::JokeCategory;
11use norriserror::NorrisError;
12
13pub fn get_random() -> Result<Joke, NorrisError> {
14    requestor::Requestor::new()
15        .retrieve_response("/random")
16        .parse_it_to::<Joke>()
17}
18
19pub fn get_random_with_category(category: JokeCategory) -> Result<Joke, NorrisError> {
20    requestor::Requestor::new()
21        .retrieve_response(format!("/random?category={}", category).as_str())
22        .parse_it_to::<Joke>()
23}
24
25pub fn get_with_query(query: &str) -> Result<MultiJokes, NorrisError> {
26    requestor::Requestor::new()
27        .retrieve_response(format!("/search?query={}", query).as_str())
28        .parse_it_to::<MultiJokes>()
29}
30
31pub async fn get_random_async() -> Result<Joke, NorrisError> {
32    requestor_async::Requestor::new()
33        .retrieve_response("/random")
34        .await
35        .parse_it_to::<Joke>()
36        .await
37}
38
39pub async fn get_random_with_category_async(category: JokeCategory) -> Result<Joke, NorrisError> {
40    requestor_async::Requestor::new()
41        .retrieve_response(format!("/random?category={}", category).as_str())
42        .await
43        .parse_it_to::<Joke>()
44        .await
45}
46
47pub async fn get_with_query_async(query: &str) -> Result<MultiJokes, NorrisError> {
48    requestor_async::Requestor::new()
49        .retrieve_response(format!("/search?query={}", query).as_str())
50        .await
51        .parse_it_to::<MultiJokes>()
52        .await
53}
54
55#[cfg(test)]
56mod tests {
57    use super::*;
58
59    #[test]
60    fn test_random() {
61        let result_joke = get_random();
62
63        match result_joke {
64            Ok(joke) => assert!(!joke.value.is_empty()),
65            Err(err) => panic!("{:?}", err)
66        }
67
68        // if let Ok(joke) = result_joke {
69        //     assert!(!joke.value.is_empty())
70        // }
71    }
72
73    #[test]
74    fn test_random_with_category() {
75        
76        let result_joke = get_random_with_category(JokeCategory::Sport);
77
78        match result_joke {
79            Ok(joke) => assert!(!joke.value.is_empty()),
80            Err(err) => panic!("{:?}", err)
81        }
82
83        // if let Ok(joke) = result_joke {
84        //     assert!(!joke.value.is_empty())
85        // }
86    }
87
88    #[test]
89    fn test_with_query() {
90        let mut result_jokes = get_with_query("forsureitdoesnotexist");
91        match result_jokes {
92            Ok(jokes) => assert!(jokes.total == 0),
93            Err(err) => panic!("{:?}", err)
94        }
95
96        // if let Ok(jokes) = result_jokes {
97        //     assert!(jokes.total == 0);
98        // }
99
100        result_jokes = get_with_query("sport");
101        match result_jokes {
102            Ok(jokes) => assert!(jokes.total > 0),
103            Err(err) => panic!("{:?}", err)
104        }
105
106        // if let Ok(multi) = result_jokes {
107        //     assert!(multi.total > 0);
108        // }
109    }
110
111    #[tokio::test]
112    async fn test_random_async() {
113        let result_joke = get_random_async().await;
114
115        match result_joke {
116            Ok(joke) => assert!(!joke.value.is_empty()),
117            Err(err) => panic!("{:?}", err)
118        }
119
120        // if let Ok(joke) = result_joke {
121        //     assert!(!joke.value.is_empty())
122        // }
123    }
124
125    #[tokio::test]
126    async fn test_random_with_category_async() {
127        
128        let result_joke = get_random_with_category_async(JokeCategory::Sport).await;
129
130        match result_joke {
131            Ok(joke) => assert!(!joke.value.is_empty()),
132            Err(err) => panic!("{:?}", err)
133        }
134
135        // if let Ok(joke) = result_joke {
136        //     assert!(!joke.value.is_empty())
137        // }
138    }
139
140    #[tokio::test]
141    async fn test_with_query_async() {
142        let mut result_jokes = get_with_query_async("forsureitdoesnotexist").await;
143        match result_jokes {
144            Ok(jokes) => assert!(jokes.total == 0),
145            Err(err) => panic!("{:?}", err)
146        }
147
148        // if let Ok(jokes) = result_jokes {
149        //     assert!(jokes.total == 0);
150        // }
151
152        result_jokes = get_with_query_async("sport").await;
153        match result_jokes {
154            Ok(jokes) => assert!(jokes.total > 0),
155            Err(err) => panic!("{:?}", err)
156        }
157
158        // if let Ok(multi) = result_jokes {
159        //     assert!(multi.total > 0);
160        // }
161    }
162}