From ee25ffed4139136f994fd6e665de9d214339715b Mon Sep 17 00:00:00 2001 From: adlee-was-taken Date: Sun, 19 Apr 2026 13:03:03 -0400 Subject: [PATCH] feat(core): flesh out SecureNoteCore (Zeroizing body) Co-Authored-By: Claude Opus 4.7 (1M context) --- .../idfoto-core/src/item_types/secure_note.rs | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/crates/idfoto-core/src/item_types/secure_note.rs b/crates/idfoto-core/src/item_types/secure_note.rs index 271c222..20fe52d 100644 --- a/crates/idfoto-core/src/item_types/secure_note.rs +++ b/crates/idfoto-core/src/item_types/secure_note.rs @@ -1,3 +1,30 @@ +//! Secure note: just a multiline body, Zeroizing. + use serde::{Deserialize, Serialize}; +use zeroize::Zeroizing; + #[derive(Debug, Clone, Serialize, Deserialize, Default)] -pub struct SecureNoteCore {} +pub struct SecureNoteCore { + pub body: Zeroizing, +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn secure_note_round_trips() { + let note = SecureNoteCore { body: Zeroizing::new("a multi\nline note".into()) }; + let json = serde_json::to_string(¬e).unwrap(); + let parsed: SecureNoteCore = serde_json::from_str(&json).unwrap(); + assert_eq!(parsed.body.as_str(), "a multi\nline note"); + } + + #[test] + fn empty_body_round_trips() { + let note = SecureNoteCore::default(); + let json = serde_json::to_string(¬e).unwrap(); + let parsed: SecureNoteCore = serde_json::from_str(&json).unwrap(); + assert!(parsed.body.is_empty()); + } +}