net_deleter_api/api/
network.rs

1use ion_rs;
2
3use ion_rs::IonReader;
4use ion_rs::IonType;
5use ion_rs::IonWriter;
6
7use ion_rs::ReaderBuilder;
8
9use net_core_api::core::api::API;
10use net_core_api::core::encoder_api::Encoder;
11use net_core_api::core::decoder_api::Decoder;
12use net_core_api::core::typed_api::Typed;
13
14const DATA_TYPE: &str = "delete-network-request";
15
16#[derive(Debug, PartialEq, Eq)]
17pub struct DeleteNetworkRequestDTO {
18    id: String,
19}
20impl API for DeleteNetworkRequestDTO { }
21
22impl DeleteNetworkRequestDTO {
23    pub fn new(id: &str) -> Self {
24        DeleteNetworkRequestDTO {
25            id: id.to_string(),
26        }
27    }
28    
29    pub fn get_id(&self) -> &str {
30        &self.id
31    }
32}
33
34impl Encoder for DeleteNetworkRequestDTO {
35    fn encode(&self) -> Vec<u8> {
36        let buffer: Vec<u8> = Vec::new();
37
38        let binary_writer_builder = ion_rs::BinaryWriterBuilder::new();
39        let mut writer = binary_writer_builder.build(buffer.clone()).unwrap();
40        
41        writer.step_in(IonType::Struct).expect("Error while creating an ion struct");
42
43        writer.set_field_name("id");
44        writer.write_string(&self.id).unwrap();
45
46        writer.step_out().unwrap();
47        writer.flush().unwrap();
48
49        writer.output().as_slice().into()
50    }
51}
52
53impl Decoder for DeleteNetworkRequestDTO {
54    fn decode(data: &[u8]) -> Self {
55        let mut binary_user_reader = ReaderBuilder::new().build(data).unwrap();
56        binary_user_reader.next().unwrap();
57        binary_user_reader.step_in().unwrap();
58
59        binary_user_reader.next().unwrap();
60        let id = binary_user_reader.read_str().unwrap();
61        
62        DeleteNetworkRequestDTO::new(
63            id,
64        )
65    }
66}
67
68impl Typed for DeleteNetworkRequestDTO {
69    fn get_data_type() -> &'static str {
70        DATA_TYPE
71    }
72
73    fn get_type(&self) -> &str {
74        Self::get_data_type()
75    }
76}
77
78#[cfg(test)]
79mod tests {
80    use ion_rs::IonType;
81    use ion_rs::IonReader;
82    use ion_rs::ReaderBuilder;
83    use ion_rs::StreamItem;
84
85    use net_core_api::core::encoder_api::Encoder;
86    use net_core_api::core::decoder_api::Decoder;
87
88    use crate::api::network::DeleteNetworkRequestDTO;
89
90    #[test]
91    fn reader_correctly_read_encoded_delete_network_request() {
92        const ID: &'static str = "1";
93        let delete_network_request = DeleteNetworkRequestDTO::new(
94            ID,
95        );
96        let mut binary_user_reader = ReaderBuilder::new().build(delete_network_request.encode()).unwrap();
97
98        assert_eq!(StreamItem::Value(IonType::Struct), binary_user_reader.next().unwrap());
99        binary_user_reader.step_in().unwrap();
100
101        assert_eq!(StreamItem::Value(IonType::String), binary_user_reader.next().unwrap());
102        assert_eq!("id", binary_user_reader.field_name().unwrap());
103        assert_eq!(ID, binary_user_reader.read_str().unwrap());
104
105        binary_user_reader.step_out().unwrap();
106    }
107
108    #[test]
109    fn endec_delete_network_request() {
110        const ID: &'static str = "1";
111        let delete_network_request = DeleteNetworkRequestDTO::new(
112            ID,
113        );
114        
115        assert_eq!(delete_network_request, DeleteNetworkRequestDTO::decode(&delete_network_request.encode()));
116    }
117}