onspring-api-sdk-rust 0.0.1

Rust SDK for the Onspring API
Documentation
use onspring::{OnspringClient, PagingRequest};

#[tokio::main]
async fn main() -> onspring::Result<()> {
  dotenvy::dotenv().ok();
  let base_url = std::env::var("API_BASE_URL").expect("API_BASE_URL is required");
  let api_key = std::env::var("SANDBOX_API_KEY").expect("SANDBOX_API_KEY is required");
  let app_id: i32 = std::env::var("TEST_SURVEY_ID")
    .expect("TEST_SURVEY_ID is required")
    .parse()
    .expect("TEST_SURVEY_ID must be an integer");

  let client = OnspringClient::builder(&api_key)
    .base_url(&base_url)
    .build();

  // List reports for an app
  let paging = PagingRequest {
    page_number: 1,
    page_size: 10,
  };
  let response = client.list_reports(app_id, Some(paging)).await?;
  println!("Total reports: {:?}", response.total_records);

  if let Some(items) = &response.items {
    for report in items {
      println!(
        "  Report: {} (id: {}, app_id: {})",
        report.name.as_deref().unwrap_or("N/A"),
        report.id,
        report.app_id,
      );
    }

    // Get report data for the first report
    if let Some(first) = items.first() {
      let data = client.get_report(first.id, None, None).await?;
      println!(
        "\nReport '{}' data:",
        first.name.as_deref().unwrap_or("N/A")
      );
      println!("  Columns: {:?}", data.columns);

      if let Some(rows) = &data.rows {
        println!("  Rows: {}", rows.len());
        for (i, row) in rows.iter().take(3).enumerate() {
          println!(
            "    Row {}: record_id={:?}, cells={:?}",
            i, row.record_id, row.cells
          );
        }
      }
    }
  }

  Ok(())
}