use super::{
ByteReader,
ByteWriter,
Deserializable,
DeserializationError,
NoteDetailsCommitment,
NoteId,
NoteMetadata,
Serializable,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct NoteHeader {
details_commitment: NoteDetailsCommitment,
metadata: NoteMetadata,
}
impl NoteHeader {
pub fn new(details_commitment: NoteDetailsCommitment, metadata: NoteMetadata) -> Self {
Self { details_commitment, metadata }
}
pub fn id(&self) -> NoteId {
NoteId::new(self.details_commitment(), self.metadata())
}
pub fn details_commitment(&self) -> NoteDetailsCommitment {
self.details_commitment
}
pub fn metadata(&self) -> &NoteMetadata {
&self.metadata
}
pub fn into_metadata(self) -> NoteMetadata {
self.metadata
}
}
impl Serializable for NoteHeader {
fn write_into<W: ByteWriter>(&self, target: &mut W) {
self.details_commitment.write_into(target);
self.metadata.write_into(target);
}
fn get_size_hint(&self) -> usize {
self.details_commitment.get_size_hint() + self.metadata.get_size_hint()
}
}
impl Deserializable for NoteHeader {
fn read_from<R: ByteReader>(source: &mut R) -> Result<Self, DeserializationError> {
let details_commitment = NoteDetailsCommitment::read_from(source)?;
let metadata = NoteMetadata::read_from(source)?;
Ok(Self::new(details_commitment, metadata))
}
}