sdk_v1_listing_prepare.rs (3190B)
1 use radroots_authority::RadrootsActorContext; 2 use radroots_core::{ 3 RadrootsCoreCurrency, RadrootsCoreDecimal, RadrootsCoreMoney, RadrootsCoreQuantity, 4 RadrootsCoreQuantityPrice, RadrootsCoreUnit, 5 }; 6 use radroots_events::contract::RadrootsActorRole; 7 use radroots_events::ids::{RadrootsDTag, RadrootsInventoryBinId}; 8 use radroots_sdk::protocol::farm::RadrootsFarmRef; 9 use radroots_sdk::protocol::listing::{ 10 RadrootsListing, RadrootsListingBin, RadrootsListingProduct, 11 }; 12 use radroots_sdk::{ListingPreparePublishRequest, RadrootsSdk, RadrootsSdkTimestamp}; 13 14 const SELLER: &str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 15 16 #[tokio::main] 17 async fn main() -> Result<(), Box<dyn std::error::Error>> { 18 let sdk = RadrootsSdk::builder() 19 .fixed_clock(RadrootsSdkTimestamp::from_unix_seconds(1_700_000_000)) 20 .build() 21 .await?; 22 let actor = RadrootsActorContext::test(SELLER, [RadrootsActorRole::Seller])?; 23 let request = ListingPreparePublishRequest::new(actor, sample_listing(SELLER)); 24 25 let plan = sdk.listings().prepare_publish(request)?; 26 27 println!("public listing: {}", plan.public_listing_addr.as_str()); 28 println!("draft listing: {}", plan.draft_listing_addr.as_str()); 29 println!("expected event: {}", plan.expected_event_id.as_str()); 30 Ok(()) 31 } 32 33 fn sample_listing(seller: &str) -> RadrootsListing { 34 RadrootsListing { 35 d_tag: RadrootsDTag::parse("AAAAAAAAAAAAAAAAAAAAAQ").expect("d tag"), 36 published_at: None, 37 farm: RadrootsFarmRef { 38 pubkey: seller.to_owned(), 39 d_tag: "AAAAAAAAAAAAAAAAAAAAAA".to_owned(), 40 }, 41 product: RadrootsListingProduct { 42 key: "coffee".to_owned(), 43 title: "Coffee".to_owned(), 44 category: "coffee".to_owned(), 45 summary: Some("Single origin coffee".to_owned()), 46 process: None, 47 lot: None, 48 location: None, 49 profile: None, 50 year: None, 51 }, 52 primary_bin_id: RadrootsInventoryBinId::parse("bin-1").expect("bin id"), 53 bins: vec![RadrootsListingBin { 54 bin_id: RadrootsInventoryBinId::parse("bin-1").expect("bin id"), 55 quantity: RadrootsCoreQuantity::new( 56 RadrootsCoreDecimal::from(1000u32), 57 RadrootsCoreUnit::MassG, 58 ), 59 price_per_canonical_unit: RadrootsCoreQuantityPrice { 60 amount: RadrootsCoreMoney::new( 61 RadrootsCoreDecimal::from(20u32), 62 RadrootsCoreCurrency::USD, 63 ), 64 quantity: RadrootsCoreQuantity::new( 65 RadrootsCoreDecimal::from(1u32), 66 RadrootsCoreUnit::MassG, 67 ), 68 }, 69 display_amount: None, 70 display_unit: None, 71 display_label: None, 72 display_price: None, 73 display_price_unit: None, 74 }], 75 resource_area: None, 76 plot: None, 77 discounts: None, 78 inventory_available: None, 79 availability: None, 80 delivery_method: None, 81 location: None, 82 images: None, 83 } 84 }