brasilapi_client/definitions/
banks.rs1use crate::{client::*, constants::banks::*, errors::*, request::*};
2use serde::{Deserialize, Serialize};
3
4#[derive(Serialize, Deserialize, Debug)]
5#[serde(rename_all = "camelCase")]
6pub struct BankResponseData {
8 pub ispb: String,
10 pub name: String,
12 pub code: i16,
14 pub full_name: String,
16}
17
18impl PartialEq for BankResponseData {
19 fn eq(&self, other: &Self) -> bool {
20 self.ispb == other.ispb && self.name == other.name && self.code == other.code && self.full_name == other.full_name
21 }
22}
23
24impl BrasilApiClient {
25 pub async fn get_banks(&self) -> Result<Vec<BankResponseData>, Error> {
27 Ok(get::<(), Vec<BankResponseData>>(
28 &format!("{}/{}", self.base_url, SVC_URL)
29 ).await?)
30 }
31
32 pub async fn get_banks_by_code(&self, code: &i16) -> Result<BankResponseData, Error> {
37 if code < MIN_CODE || code > MAX_CODE {
38 return Err(Error::InvalidInputRangeError
39 {
40 name: "code".to_string(),
41 min: 1,
42 max: 999
43 })
44 }
45
46
47 Ok(get::<(), BankResponseData>(
48 &format!("{}/{}/{}", self.base_url, SVC_URL, code)
49 ).await?)
50 }
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56 use crate::client::tests::cli;
57 use futures_await_test::async_test;
58
59 #[async_test]
60 async fn test_invalid_min_range() {
61 let code = MIN_CODE - 1;
62 let resp = cli().get_banks_by_code(&code).await;
63 assert!(resp.is_err());
64 }
65
66 #[async_test]
67 async fn test_invalid_max_range() {
68 let code = MAX_CODE + 1;
69 let resp = cli().get_banks_by_code(&code).await;
70 assert!(resp.is_err());
71 }
72
73 #[async_test]
74 async fn test_valid_banco_do_brasil() {
75 let resp = cli().get_banks_by_code(&1).await;
76 assert!(resp.is_ok());
77
78 let expected_text = r#"{"ispb":"00000000","name":"BCO DO BRASIL S.A.","code":1,"fullName":"Banco do Brasil S.A."}"#;
79 let expected_json = serde_json::from_str::<BankResponseData>(expected_text).unwrap();
80
81 let from_svc = resp.unwrap();
82
83 assert_eq!(from_svc, expected_json);
84 }
85
86 #[async_test]
87 async fn test_non_existing() {
88 let resp = cli().get_banks_by_code(&999).await;
89 assert!(resp.is_err());
90 }
91
92}