use js_export_macro::js_export;
use crate::models::NoteType;
use crate::models::input_note::InputNote;
use crate::models::note::Note;
use crate::models::note_attachment::NoteAttachment;
use crate::models::note_id::NoteId;
use crate::models::note_inclusion_proof::NoteInclusionProof;
use crate::models::note_metadata::NoteMetadata;
#[derive(Clone)]
#[js_export]
pub struct FetchedNote {
note_id: NoteId,
metadata: NoteMetadata,
inclusion_proof: NoteInclusionProof,
note: Option<Note>,
attachments: Vec<NoteAttachment>,
}
impl FetchedNote {
pub(crate) fn note(&self) -> Option<Note> {
self.note.clone()
}
pub(crate) fn with_attachments(
note_id: NoteId,
metadata: NoteMetadata,
inclusion_proof: NoteInclusionProof,
note: Option<Note>,
attachments: Vec<NoteAttachment>,
) -> FetchedNote {
FetchedNote {
note_id,
metadata,
inclusion_proof,
note,
attachments,
}
}
}
#[js_export]
impl FetchedNote {
#[js_export(constructor)]
pub fn new(
note_id: NoteId,
metadata: NoteMetadata,
inclusion_proof: NoteInclusionProof,
note: Option<Note>,
) -> FetchedNote {
FetchedNote {
note_id,
metadata,
inclusion_proof,
note,
attachments: Vec::new(),
}
}
#[js_export(getter, js_name = "noteId")]
pub fn get_note_id(&self) -> NoteId {
self.note_id
}
#[js_export(getter)]
pub fn metadata(&self) -> NoteMetadata {
self.metadata.clone()
}
#[js_export(getter)]
pub fn attachments(&self) -> Vec<NoteAttachment> {
self.attachments.clone()
}
#[js_export(getter, js_name = "note")]
pub fn get_note(&self) -> Option<Note> {
self.note.clone()
}
#[js_export(getter, js_name = "inclusionProof")]
pub fn get_inclusion_proof(&self) -> NoteInclusionProof {
self.inclusion_proof.clone()
}
#[js_export(getter, js_name = "noteType")]
pub fn get_note_type(&self) -> NoteType {
self.metadata.note_type()
}
#[js_export(js_name = "asInputNote")]
pub fn as_input_note(&self) -> Option<InputNote> {
self.note().map(|note| InputNote::authenticated(¬e, &self.inclusion_proof))
}
}