trade_validation.rs (3834B)
1 #![forbid(unsafe_code)] 2 3 #[cfg(not(feature = "std"))] 4 use alloc::{string::String, vec::Vec}; 5 6 use crate::{RadrootsNostrEventPtr, order::RadrootsListingParseError}; 7 8 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] 9 #[cfg_attr( 10 feature = "serde", 11 serde(rename_all = "snake_case", tag = "kind", content = "amount") 12 )] 13 #[derive(Clone, Debug, PartialEq, Eq)] 14 pub enum RadrootsTradeValidationListingError { 15 InvalidKind { kind: u32 }, 16 MissingListingId, 17 ListingEventNotFound { listing_addr: String }, 18 ListingEventFetchFailed { listing_addr: String }, 19 ParseError { error: RadrootsListingParseError }, 20 InvalidSeller, 21 MissingFarmProfile, 22 MissingFarmRecord, 23 MissingTitle, 24 MissingDescription, 25 MissingProductType, 26 MissingBins, 27 MissingPrimaryBin, 28 InvalidBin, 29 MissingPrice, 30 InvalidPrice, 31 MissingInventory, 32 InvalidInventory, 33 MissingAvailability, 34 MissingLocation, 35 MissingDeliveryMethod, 36 } 37 38 impl core::fmt::Display for RadrootsTradeValidationListingError { 39 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { 40 match self { 41 Self::InvalidKind { kind } => write!(f, "invalid listing kind: {kind}"), 42 Self::MissingListingId => write!(f, "missing listing id"), 43 Self::ListingEventNotFound { listing_addr } => { 44 write!(f, "listing event not found: {listing_addr}") 45 } 46 Self::ListingEventFetchFailed { listing_addr } => { 47 write!(f, "listing event fetch failed: {listing_addr}") 48 } 49 Self::ParseError { error } => write!(f, "invalid listing data: {error}"), 50 Self::InvalidSeller => write!(f, "listing author does not match farm pubkey"), 51 Self::MissingFarmProfile => write!(f, "missing farm profile"), 52 Self::MissingFarmRecord => write!(f, "missing farm record"), 53 Self::MissingTitle => write!(f, "missing listing title"), 54 Self::MissingDescription => write!(f, "missing listing description"), 55 Self::MissingProductType => write!(f, "missing listing product type"), 56 Self::MissingBins => write!(f, "missing listing bins"), 57 Self::MissingPrimaryBin => write!(f, "missing primary listing bin"), 58 Self::InvalidBin => write!(f, "invalid listing bin"), 59 Self::MissingPrice => write!(f, "missing listing price"), 60 Self::InvalidPrice => write!(f, "invalid listing price"), 61 Self::MissingInventory => write!(f, "missing listing inventory"), 62 Self::InvalidInventory => write!(f, "invalid listing inventory"), 63 Self::MissingAvailability => write!(f, "missing listing availability"), 64 Self::MissingLocation => write!(f, "missing listing location"), 65 Self::MissingDeliveryMethod => write!(f, "missing listing delivery method"), 66 } 67 } 68 } 69 70 #[cfg(feature = "std")] 71 impl std::error::Error for RadrootsTradeValidationListingError {} 72 73 #[cfg_attr(feature = "dto-bindgen", derive(dto_bindgen::Dto))] 74 #[cfg_attr( 75 feature = "dto-bindgen", 76 dto(ts(name = "RadrootsTradeListingValidateRequest")) 77 )] 78 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] 79 #[derive(Clone, Debug, PartialEq, Eq)] 80 pub struct RadrootsTradeValidationListingRequest { 81 pub listing_event: Option<RadrootsNostrEventPtr>, 82 } 83 84 #[cfg_attr(feature = "dto-bindgen", derive(dto_bindgen::Dto))] 85 #[cfg_attr( 86 feature = "dto-bindgen", 87 dto(ts(name = "RadrootsTradeListingValidateResult")) 88 )] 89 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] 90 #[derive(Clone, Debug, PartialEq, Eq)] 91 pub struct RadrootsTradeValidationListingResult { 92 pub valid: bool, 93 pub errors: Vec<RadrootsTradeValidationListingError>, 94 }