sdk

Radroots SDK and bindings
git clone https://radroots.dev/git/sdk.git
Log | Files | Refs | README

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 }