jobs.rs (1471B)
1 //! Low-level NIP-90 job request, result, and feedback event helpers. 2 3 use alloc::{string::String, vec::Vec}; 4 5 use nostr::nips::nip90::{DataVendingMachineStatus, JobFeedbackData}; 6 7 use crate::error::Error; 8 use crate::types::{ 9 GenericBuilder, RadrootsNostrEvent, RadrootsNostrEventBuilderUnchecked, RadrootsNostrTag, 10 }; 11 12 pub fn build_event_job_result( 13 job_request: &RadrootsNostrEvent, 14 payload: impl Into<String>, 15 millisats: u64, 16 bolt11: Option<String>, 17 tags: Option<Vec<RadrootsNostrTag>>, 18 ) -> Result<GenericBuilder, Error> { 19 let builder = RadrootsNostrEventBuilderUnchecked::job_result( 20 job_request.clone(), 21 payload, 22 millisats, 23 bolt11, 24 )? 25 .tags(tags.unwrap_or_default()) 26 .allow_self_tagging(); 27 Ok(GenericBuilder::from_unchecked(builder)) 28 } 29 30 pub fn build_event_job_feedback( 31 job_request: &RadrootsNostrEvent, 32 status: &str, 33 extra_info: Option<String>, 34 tags: Option<Vec<RadrootsNostrTag>>, 35 ) -> Result<GenericBuilder, Error> { 36 let status = status 37 .parse::<DataVendingMachineStatus>() 38 .unwrap_or(DataVendingMachineStatus::Error); 39 let feedback_data = JobFeedbackData::new(&job_request.clone(), status) 40 .extra_info(extra_info.unwrap_or_default()); 41 let builder = RadrootsNostrEventBuilderUnchecked::job_feedback(feedback_data) 42 .tags(tags.unwrap_or_default()) 43 .allow_self_tagging(); 44 Ok(GenericBuilder::from_unchecked(builder)) 45 }