85 lines
2.3 KiB
Rust
85 lines
2.3 KiB
Rust
use onspring::{OnspringClient, PagingRequest, QueryRecordsRequest, SaveRecordRequest};
|
|||
|
|
use std::collections::HashMap;
|
||
|
|
|
||
|
|
#[tokio::main]
|
||
|
|
async fn main() -> onspring::Result<()> {
|
||
|
|
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 field_id = std::env::var("TEST_TEXT_FIELD").expect("TEST_TEXT_FIELD is required");
|
||
|
|
|
||
|
|
let client = OnspringClient::builder(&api_key)
|
||
|
|
.base_url(&base_url)
|
||
|
|
.build();
|
||
|
|
|
||
|
|
// List records
|
||
|
|
let paging = PagingRequest {
|
||
|
|
page_number: 1,
|
||
|
|
page_size: 5,
|
||
|
|
};
|
||
|
|
let response = client
|
||
|
|
.list_records(app_id, Some(paging), None, None)
|
||
|
|
.await?;
|
||
|
|
println!("Total records: {:?}", response.total_records);
|
||
|
|
|
||
|
|
if let Some(items) = &response.items {
|
||
|
|
for record in items {
|
||
|
|
println!(" Record ID: {}", record.record_id);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Create a record
|
||
|
|
let mut fields = HashMap::new();
|
||
|
|
fields.insert(field_id.clone(), serde_json::json!("Hello from Rust SDK"));
|
||
|
|
|
||
|
|
let request = SaveRecordRequest {
|
||
|
|
app_id,
|
||
|
|
record_id: None,
|
||
|
|
fields,
|
||
|
|
};
|
||
|
|
|
||
|
|
let saved = client.save_record(request).await?;
|
||
|
|
println!("\nCreated record with ID: {}", saved.id);
|
||
|
|
|
||
|
|
// Get the record back
|
||
|
|
let record = client.get_record(app_id, saved.id, None, None).await?;
|
||
|
|
println!(
|
||
|
|
"Fetched record: app_id={}, record_id={}",
|
||
|
|
record.app_id, record.record_id
|
||
|
|
);
|
||
|
|
|
||
|
|
// Update the record
|
||
|
|
let mut fields = HashMap::new();
|
||
|
|
fields.insert(field_id, serde_json::json!("Updated from Rust SDK"));
|
||
|
|
|
||
|
|
let update = SaveRecordRequest {
|
||
|
|
app_id,
|
||
|
|
record_id: Some(saved.id),
|
||
|
|
fields,
|
||
|
|
};
|
||
|
|
client.save_record(update).await?;
|
||
|
|
println!("Updated record {}", saved.id);
|
||
|
|
|
||
|
|
// Query records
|
||
|
|
let query = QueryRecordsRequest {
|
||
|
|
app_id,
|
||
|
|
filter: format!(
|
||
|
|
"{} contains 'Rust'",
|
||
|
|
std::env::var("TEST_TEXT_FIELD").unwrap()
|
||
|
|
),
|
||
|
|
field_ids: None,
|
||
|
|
data_format: None,
|
||
|
|
};
|
||
|
|
let query_result = client.query_records(query, None).await?;
|
||
|
|
println!("\nQuery found {:?} records", query_result.total_records);
|
||
|
|
|
||
|
|
// Delete the record
|
||
|
|
client.delete_record(app_id, saved.id).await?;
|
||
|
|
println!("Deleted record {}", saved.id);
|
||
|
|
|
||
|
|
Ok(())
|
||
|
|
}
|