lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

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 }