tonlib_core/message/sbt/
revoke.rs

1use super::SBT_REVOKE;
2use crate::cell::{Cell, CellBuilder};
3use crate::message::{HasOpcode, TonMessage, TonMessageError};
4
5/// Creates a body for nft get_static_data according to TL-B schema:
6///
7/// ```raw
8/// revoke#6f89f5e3
9///   query_id:uint64
10/// = InternalMsgBody;
11/// ```
12#[derive(Clone, Debug, PartialEq)]
13pub struct SbtRevokeMessage {
14    /// arbitrary request number.
15    pub query_id: u64,
16}
17
18#[allow(clippy::new_without_default)]
19impl SbtRevokeMessage {
20    pub fn new() -> Self {
21        SbtRevokeMessage { query_id: 0 }
22    }
23}
24
25impl TonMessage for SbtRevokeMessage {
26    fn build(&self) -> Result<Cell, TonMessageError> {
27        let mut builder = CellBuilder::new();
28        builder.store_u32(32, Self::opcode())?;
29        builder.store_u64(64, self.query_id)?;
30
31        Ok(builder.build()?)
32    }
33
34    fn parse(cell: &Cell) -> Result<Self, TonMessageError> {
35        let mut parser = cell.parser();
36
37        let opcode: u32 = parser.load_u32(32)?;
38        let query_id = parser.load_u64(64)?;
39        parser.ensure_empty()?;
40
41        let result = SbtRevokeMessage { query_id };
42        result.verify_opcode(opcode)?;
43        Ok(result)
44    }
45}
46
47impl HasOpcode for SbtRevokeMessage {
48    fn set_query_id(&mut self, query_id: u64) {
49        self.query_id = query_id;
50    }
51
52    fn query_id(&self) -> u64 {
53        self.query_id
54    }
55
56    fn opcode() -> u32 {
57        SBT_REVOKE
58    }
59}
60
61#[cfg(test)]
62mod tests {
63
64    use super::SbtRevokeMessage;
65    use crate::message::{HasOpcode, TonMessage};
66    #[test]
67    fn sbt_revoke_msg_test() {
68        let query_id = 1234567890;
69        let expected = SbtRevokeMessage { query_id };
70
71        let build_result = SbtRevokeMessage::new().with_query_id(query_id).build();
72        assert!(build_result.is_ok());
73
74        let cell = build_result.unwrap();
75        let parse_result = SbtRevokeMessage::parse(&cell);
76        assert!(parse_result.is_ok());
77
78        let parsed_msg = parse_result.unwrap();
79        assert_eq!(expected, parsed_msg);
80    }
81}