brasilapi_client/definitions/
ddd.rs1use crate::{client::*, constants::ddd::*, errors::*, request::*};
2use serde::{Deserialize, Serialize};
3
4#[derive(Serialize, Deserialize, Debug)]
5#[serde(rename_all = "camelCase")]
6pub struct DDDResponseData {
8 pub state: String,
10 pub cities: Vec<String>
12}
13
14impl PartialEq for DDDResponseData {
15 fn eq(&self, other: &Self) -> bool {
16 self.state == other.state && self.cities == other.cities
17 }
18}
19
20impl BrasilApiClient{
21 pub async fn get_city_and_states_by_ddd(&self, ddd: &i8) -> Result<DDDResponseData, Error> {
22
23 if ddd < MIN_DDD || ddd > MAX_DDD {
24 return Err(Error::InvalidInputRangeError
25 {
26 name: "ddd".to_string(),
27 min: *MIN_DDD as i32,
28 max: *MAX_DDD as i32
29 })
30 }
31
32 Ok(get::<(), DDDResponseData>(
33 &format!("{}/{}/{}", self.base_url, SVC_URL, ddd)
34 ).await?)
35 }
36}
37
38#[cfg(test)]
39mod tests {
40 use super::*;
41 use crate::client::tests::cli;
42 use futures_await_test::async_test;
43
44 #[async_test]
45 async fn test_invalid_min_range() {
46 let code = MIN_DDD - 1;
47 let resp = cli().get_city_and_states_by_ddd(&code).await;
48 assert!(resp.is_err());
49 }
50
51 #[async_test]
52 async fn test_invalid_max_range() {
53 let code = MAX_DDD + 1;
54 let resp = cli().get_city_and_states_by_ddd(&code).await;
55 assert!(resp.is_err());
56 }
57
58
59 #[async_test]
60 async fn test_valid_ddd_97() {
61 let resp = cli().get_city_and_states_by_ddd(&97).await;
62 assert!(resp.is_ok());
63
64 let expected_text = r#"{"state":"AM","cities":["UARINI","TONANTINS","TEFÉ","TAPAUÁ","TABATINGA","SÃO PAULO DE OLIVENÇA","SÃO GABRIEL DA CACHOEIRA","SANTO ANTÔNIO DO IÇÁ","SANTA ISABEL DO RIO NEGRO","PAUINI","NOVO ARIPUANÃ","MARAÃ","MANICORÉ","LÁBREA","JUTAÍ","JURUÁ","JAPURÁ","ITAMARATI","IPIXUNA","HUMAITÁ","GUAJARÁ","FONTE BOA","ENVIRA","EIRUNEPÉ","CODAJÁS","COARI","CARAUARI","CANUTAMA","BOCA DO ACRE","BERURI","BENJAMIN CONSTANT","BARCELOS","ATALAIA DO NORTE","APUÍ","ANORI","ANAMÃ","AMATURÁ","ALVARÃES"]}"#;
65 let expected_json = serde_json::from_str::<DDDResponseData>(expected_text).unwrap();
66
67 let from_svc = resp.unwrap();
68
69 assert_eq!(from_svc, expected_json);
70 }
71
72 #[async_test]
73 async fn test_non_existing() {
74 let resp = cli().get_city_and_states_by_ddd(&26).await;
75 assert!(resp.is_err());
76 }
77
78}