ic_icrc_tx/parser/response/
mod.rs1use base64::{engine::general_purpose, Engine};
2use candid::Decode;
3use icrc_ledger_types::icrc1::transfer::{BlockIndex, TransferError};
4pub struct Response {
6 pub content_map: String,
7}
8
9pub type TransferResult = Result<BlockIndex, TransferError>;
11
12pub fn parse_icrc1_transfer_response(response: Response) -> TransferResult {
29 let result_bytes = general_purpose::STANDARD
31 .decode(response.content_map)
32 .unwrap();
33 let result = Decode!(&result_bytes, TransferResult).unwrap();
34
35 println!("Result: {:?}", result);
36
37 result
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn test_parse_icrc1_err_response() {
46 let content_map = "RElETAhrAryKAX3F/tIBAWsI0cSYfALCkey5An+UwceJBAPrgqiXBAShw+v9BwXwh+bbCQaT5b7IDH/rnNvVDwdsAsfrxNAJccSYsbUNfWwBm7O+pgp9bAGLvfKbAX1sAb+bt/ANfWwBo7uRjAp4bAGcuracAn0BAAEHAA==";
47
48 let response = Response {
49 content_map: content_map.to_string(),
50 };
51
52 let result = parse_icrc1_transfer_response(response);
53
54 assert_eq!(result.is_err(), true);
55 }
56
57 #[test]
58 fn test_parser_icrc1_success_response() {
59 let content_map = "RElETAhrAryKAX3F/tIBAWsI0cSYfALCkey5An+UwceJBAPrgqiXBAShw+v9BwXwh+bbCQaT5b7IDH/rnNvVDwdsAsfrxNAJccSYsbUNfWwBm7O+pgp9bAGLvfKbAX1sAb+bt/ANfWwBo7uRjAp4bAGcuracAn0BAACaAg==";
60 let response = Response {
61 content_map: content_map.to_string(),
62 };
63
64 let result = parse_icrc1_transfer_response(response);
65
66 assert_eq!(result.is_ok(), true);
67 }
68}