chia_sdk_types/condition/
messages.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
2pub enum MessageSide {
3 Sender,
4 Receiver,
5}
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub struct MessageFlags {
9 pub parent: bool,
10 pub puzzle: bool,
11 pub amount: bool,
12}
13
14impl MessageFlags {
15 pub const NONE: Self = Self::new(false, false, false);
16 pub const PARENT: Self = Self::new(true, false, false);
17 pub const PUZZLE: Self = Self::new(false, true, false);
18 pub const AMOUNT: Self = Self::new(false, false, true);
19 pub const PARENT_PUZZLE: Self = Self::new(true, true, false);
20 pub const PARENT_AMOUNT: Self = Self::new(true, false, true);
21 pub const PUZZLE_AMOUNT: Self = Self::new(false, true, true);
22 pub const COIN: Self = Self::new(true, true, true);
23
24 pub const fn new(parent: bool, puzzle: bool, amount: bool) -> Self {
25 Self {
26 parent,
27 puzzle,
28 amount,
29 }
30 }
31
32 pub const fn decode(value: u8, side: MessageSide) -> Self {
33 match side {
34 MessageSide::Sender => Self::new(
35 value & 0b100_000 != 0,
36 value & 0b010_000 != 0,
37 value & 0b001_000 != 0,
38 ),
39 MessageSide::Receiver => Self::new(
40 value & 0b000_100 != 0,
41 value & 0b000_010 != 0,
42 value & 0b000_001 != 0,
43 ),
44 }
45 }
46
47 pub const fn encode(self, side: MessageSide) -> u8 {
48 match side {
49 MessageSide::Sender => {
50 (self.parent as u8) << 5 | (self.puzzle as u8) << 4 | (self.amount as u8) << 3
51 }
52 MessageSide::Receiver => {
53 (self.parent as u8) << 2 | (self.puzzle as u8) << 1 | (self.amount as u8)
54 }
55 }
56 }
57}