tonlib_core/message/nft/
ownership_assigned.rs1use num_bigint::BigUint;
2
3use super::NFT_OWNERSHIP_ASSIGNED;
4use crate::cell::{ArcCell, Cell, CellBuilder, EitherCellLayout, EMPTY_ARC_CELL};
5use crate::message::{HasOpcode, TonMessage, TonMessageError, WithForwardPayload};
6use crate::TonAddress;
7
8#[derive(Clone, Debug, PartialEq)]
18pub struct NftOwnershipAssignedMessage {
19 pub query_id: u64,
21 pub prev_owner: TonAddress,
23 pub forward_payload: ArcCell,
25
26 pub forward_payload_layout: EitherCellLayout,
27}
28
29impl NftOwnershipAssignedMessage {
30 pub fn new(prev_owner: &TonAddress) -> Self {
31 NftOwnershipAssignedMessage {
32 query_id: 0,
33 prev_owner: prev_owner.clone(),
34 forward_payload: EMPTY_ARC_CELL.clone(),
35 forward_payload_layout: EitherCellLayout::Native,
36 }
37 }
38}
39
40impl TonMessage for NftOwnershipAssignedMessage {
41 fn build(&self) -> Result<Cell, TonMessageError> {
42 let mut builder = CellBuilder::new();
43 builder.store_u32(32, Self::opcode())?;
44 builder.store_u64(64, self.query_id)?;
45 builder.store_address(&self.prev_owner)?;
46 builder
47 .store_either_cell_or_cell_ref(&self.forward_payload, self.forward_payload_layout)?;
48 Ok(builder.build()?)
49 }
50
51 fn parse(cell: &Cell) -> Result<Self, TonMessageError> {
52 let mut parser = cell.parser();
53
54 let opcode: u32 = parser.load_u32(32)?;
55 let query_id = parser.load_u64(64)?;
56 let prev_owner = parser.load_address()?;
57 let forward_payload = parser.load_either_cell_or_cell_ref()?;
58 parser.ensure_empty()?;
59
60 let result = NftOwnershipAssignedMessage {
61 query_id,
62 prev_owner,
63 forward_payload,
64 forward_payload_layout: EitherCellLayout::Native,
65 };
66 result.verify_opcode(opcode)?;
67 Ok(result)
68 }
69}
70
71impl WithForwardPayload for NftOwnershipAssignedMessage {
72 fn set_forward_payload(&mut self, forward_payload: ArcCell, _forward_ton_amount: BigUint) {
73 self.forward_payload = forward_payload;
74 }
75}
76
77impl HasOpcode for NftOwnershipAssignedMessage {
78 fn set_query_id(&mut self, query_id: u64) {
79 self.query_id = query_id;
80 }
81
82 fn query_id(&self) -> u64 {
83 self.query_id
84 }
85
86 fn opcode() -> u32 {
87 NFT_OWNERSHIP_ASSIGNED
88 }
89}