use miden_protocol::account::component::{AccountComponentCode, AccountComponentMetadata};
use miden_protocol::account::{AccountComponent, AccountComponentName, AccountProcedureRoot};
use crate::account::account_component_code;
use crate::procedure_root;
account_component_code!(NOTE_CREATOR_CODE, "miden-standards-wallets-note-creator.masp");
procedure_root!(
NOTE_CREATOR_CREATE_NOTE,
NoteCreator::NAME,
NoteCreator::CREATE_NOTE_PROC_NAME,
NoteCreator::code()
);
pub struct NoteCreator;
impl NoteCreator {
pub const NAME: &'static str = "miden::standards::components::note::note_creator";
const CREATE_NOTE_PROC_NAME: &str = "create_note";
pub const fn name() -> AccountComponentName {
AccountComponentName::from_static_str(Self::NAME)
}
pub fn code() -> &'static AccountComponentCode {
&NOTE_CREATOR_CODE
}
pub fn create_note_root() -> AccountProcedureRoot {
*NOTE_CREATOR_CREATE_NOTE
}
pub fn component_metadata() -> AccountComponentMetadata {
AccountComponentMetadata::new(Self::NAME)
.with_description("Note creator component exposing only the create_note procedure")
}
}
impl From<NoteCreator> for AccountComponent {
fn from(_: NoteCreator) -> Self {
let metadata = NoteCreator::component_metadata();
AccountComponent::new(NoteCreator::code().clone(), vec![], metadata).expect(
"note creator component should satisfy the requirements of a valid account component",
)
}
}