use super::{
ByteReader,
ByteWriter,
Deserializable,
DeserializationError,
NoteAssets,
NoteHeader,
NoteId,
NoteMetadata,
Serializable,
};
use crate::Word;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PartialNote {
metadata: NoteMetadata,
recipient_digest: Word,
assets: NoteAssets,
}
impl PartialNote {
pub fn new(metadata: NoteMetadata, recipient_digest: Word, assets: NoteAssets) -> Self {
Self { metadata, recipient_digest, assets }
}
pub fn id(&self) -> NoteId {
NoteId::new(self.recipient_digest, self.assets.commitment())
}
pub fn metadata(&self) -> &NoteMetadata {
&self.metadata
}
pub fn recipient_digest(&self) -> Word {
self.recipient_digest
}
pub fn assets(&self) -> &NoteAssets {
&self.assets
}
}
impl From<&PartialNote> for NoteHeader {
fn from(note: &PartialNote) -> Self {
NoteHeader::new(note.id(), note.metadata)
}
}
impl From<PartialNote> for NoteHeader {
fn from(note: PartialNote) -> Self {
NoteHeader::new(note.id(), note.metadata)
}
}
impl Serializable for PartialNote {
fn write_into<W: ByteWriter>(&self, target: &mut W) {
self.metadata.write_into(target);
self.recipient_digest.write_into(target);
self.assets.write_into(target)
}
}
impl Deserializable for PartialNote {
fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
let metadata = NoteMetadata::read_from(source)?;
let recipient_digest = Word::read_from(source)?;
let assets = NoteAssets::read_from(source)?;
Ok(Self::new(metadata, recipient_digest, assets))
}
}