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 }
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 }
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 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 }
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 }
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 }
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 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 }
162}