miden_objects/note/
details.rs1use miden_processor::DeserializationError;
2
3use super::{NoteAssets, NoteId, NoteInputs, NoteRecipient, NoteScript, Nullifier};
4use crate::Word;
5use crate::utils::serde::{ByteReader, ByteWriter, Deserializable, Serializable};
6
7#[derive(Clone, Debug, PartialEq, Eq)]
14pub struct NoteDetails {
15    assets: NoteAssets,
16    recipient: NoteRecipient,
17}
18
19impl NoteDetails {
20    pub fn new(assets: NoteAssets, recipient: NoteRecipient) -> Self {
25        Self { assets, recipient }
26    }
27
28    pub fn id(&self) -> NoteId {
35        NoteId::from(self)
36    }
37
38    pub fn assets(&self) -> &NoteAssets {
40        &self.assets
41    }
42
43    pub fn serial_num(&self) -> Word {
45        self.recipient.serial_num()
46    }
47
48    pub fn script(&self) -> &NoteScript {
50        self.recipient.script()
51    }
52
53    pub fn inputs(&self) -> &NoteInputs {
55        self.recipient.inputs()
56    }
57
58    pub fn recipient(&self) -> &NoteRecipient {
60        &self.recipient
61    }
62
63    pub fn nullifier(&self) -> Nullifier {
67        Nullifier::from(self)
68    }
69
70    pub fn into_parts(self) -> (NoteAssets, NoteRecipient) {
72        (self.assets, self.recipient)
73    }
74}
75
76impl AsRef<NoteRecipient> for NoteDetails {
80    fn as_ref(&self) -> &NoteRecipient {
81        self.recipient()
82    }
83}
84
85impl Serializable for NoteDetails {
89    fn write_into<W: ByteWriter>(&self, target: &mut W) {
90        let Self { assets, recipient } = self;
91
92        assets.write_into(target);
93        recipient.write_into(target);
94    }
95}
96
97impl Deserializable for NoteDetails {
98    fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
99        let assets = NoteAssets::read_from(source)?;
100        let recipient = NoteRecipient::read_from(source)?;
101        Ok(Self::new(assets, recipient))
102    }
103}