sellapp-sdk 0.1.1

Official Rust SDK for the SellApp API: manage products, orders, subscriptions, and customers.
// This file is auto-generated by oagen. Do not edit.

use sellapp::Client;
use sellapp::resources::products::{CreateParams, GetParams, UpdateParams};

pub async fn catalog_workflow(client: &Client) -> Result<i64, Box<dyn std::error::Error>> {
    // These calls change real catalog data when pointed outside the fixture server.
    let body = serde_json::from_value(serde_json::json!({
        "title": "Design kit", "description": "Templates for your next project.", "visibility": "HIDDEN"
    }))?;
    let created = client.products().create(CreateParams::new(body)).await?;
    let product = client
        .products()
        .get(&created.data.id.to_string(), GetParams::default())
        .await?;
    let update = serde_json::from_value(serde_json::json!({"title": "Design kit revised"}))?;
    let updated = client
        .products()
        .update(&product.data.id.to_string(), UpdateParams::new(update))
        .await?;
    Ok(updated.data.id)
}

pub async fn checkout(client: &Client, order_id: &str) -> Result<i64, Box<dyn std::error::Error>> {
    // Starts provider checkout; retrieve current state before retrying a lost response.
    let order = client.orders().get(order_id, Default::default()).await?;
    let body = serde_json::from_value(serde_json::json!({}))?;
    let result = client
        .orders()
        .create_checkout(
            &order.data.id.to_string(),
            sellapp::resources::orders::CreateCheckoutParams::new(body),
        )
        .await?;
    Ok(result.data.id)
}

pub async fn upload(
    client: &Client,
    product: &str,
    variant: &str,
    file: Vec<u8>,
) -> Result<i64, Box<dyn std::error::Error>> {
    let body = sellapp::models::SdkUploadVariantDeliverableFileRequestMultipartFormData {
        file,
        folder_id: None,
        additional_properties: Default::default(),
    };
    let uploaded = client
        .variant_deliverable_files()
        .upload(
            product,
            variant,
            sellapp::resources::variant_deliverable_files::UploadParams::new(body),
        )
        .await?;
    let saved = client
        .variant_deliverable_files()
        .get(
            product,
            variant,
            &uploaded.data.id.to_string(),
            Default::default(),
        )
        .await?;
    Ok(saved.data.id)
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::from_env()?
        .with_base_url(std::env::var("SELLAPP_API_BASE_URL")?)
        .with_max_retries(0);
    println!("{}", catalog_workflow(&client).await?);
    Ok(())
}