Skip to main content

oil_chat_api/state/
message.rs

1use serde::{Deserialize, Serialize};
2use steel::*;
3use crate::state::message_pda;
4use super::ChatAccount;
5
6#[repr(C)]
7#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable, Serialize, Deserialize)]
8pub struct Message {
9    pub authority: Pubkey, // 32 bytes - Message author
10    pub message_id: u64, // 8 bytes - Global message ID
11    pub parent_message_id: u64, // 8 bytes - 0 if root message
12    pub parent_message_pda: Pubkey, // 32 bytes - Parent PDA (Pubkey::default() if root)
13    pub created_at: u64, // 8 bytes - Unix timestamp
14    pub message_hash: [u8; 32], // 32 bytes - Keccak256 hash of message content
15    pub reaction_count: u16, // 2 bytes - Number of reactions
16    pub _padding: u16, // 2 bytes padding
17    pub _padding2: u32, // 4 bytes padding (total 6 bytes for struct alignment)
18}
19
20impl Message {
21    pub fn pda(&self) -> (Pubkey, u8) {
22        message_pda(self.authority, self.message_id)
23    }
24}
25
26account!(ChatAccount, Message);