use chrono::{DateTime, Utc};
use miden_note_transport_proto::miden_note_transport::TransportNote;
pub use miden_protocol::Felt;
pub use miden_protocol::account::AccountId;
pub use miden_protocol::block::BlockNumber;
pub use miden_protocol::note::{
Note,
NoteDetails,
NoteHeader,
NoteId,
NoteInclusionProof,
NoteTag,
NoteType,
};
use miden_protocol::utils::serde::Serializable;
#[derive(Debug, Clone)]
pub struct StoredNote {
pub header: NoteHeader,
pub details: Vec<u8>,
pub created_at: DateTime<Utc>,
pub seq: i64,
pub after_block_num: Option<u32>,
}
impl From<StoredNote> for TransportNote {
fn from(snote: StoredNote) -> Self {
Self {
header: snote.header.to_bytes(),
details: snote.details,
after_block_num: snote.after_block_num,
}
}
}
pub fn proto_timestamp_to_datetime(pts: prost_types::Timestamp) -> anyhow::Result<DateTime<Utc>> {
let dts = DateTime::from_timestamp(
pts.seconds,
pts.nanos
.try_into()
.map_err(|_| anyhow::anyhow!("Negative timestamp nanoseconds".to_string()))?,
)
.ok_or_else(|| anyhow::anyhow!("Invalid timestamp".to_string()))?;
Ok(dts)
}