1use nostr_sdk::prelude::*;
4
5pub trait FinalizeUnsignedWithId {
14 fn finalize_unsigned_with_id(self, public_key: PublicKey) -> UnsignedEvent;
16}
17
18impl FinalizeUnsignedWithId for EventBuilder {
19 #[inline]
20 fn finalize_unsigned_with_id(self, public_key: PublicKey) -> UnsignedEvent {
21 let mut unsigned = self.finalize_unsigned(public_key);
22 unsigned.ensure_id();
23 unsigned
24 }
25}
26
27#[cfg(test)]
28mod tests {
29 use super::*;
30
31 #[test]
32 fn id_is_populated_and_matches_the_signed_event() {
33 let keys = Keys::generate();
34 let unsigned = EventBuilder::new(Kind::TextNote, "hi").finalize_unsigned_with_id(keys.public_key());
35 let id = unsigned.id.expect("id computed eagerly");
36 let signed = unsigned.finalize(&keys).expect("sign");
37 assert_eq!(id, signed.id, "eager id must equal the signed event id");
38 }
39
40 #[test]
41 fn plain_finalize_unsigned_still_leaves_it_none() {
42 let keys = Keys::generate();
45 let unsigned = EventBuilder::new(Kind::TextNote, "hi").finalize_unsigned(keys.public_key());
46 assert!(unsigned.id.is_none());
47 }
48}