2 releases
Uses new Rust 2024
new 0.1.1 | May 2, 2025 |
---|---|
0.1.0 | May 2, 2025 |
#9 in #dotenv
120KB
3K
SLoC
ckanaction
Rust library crate to access CKAN Action API endpoints through Rust builders. Based on the CKAN Action API v3. Endpoints are expected to return with an output of type serde_json::Value
.
cargo add ckanaction
Examples
Run /package_list
endpoint with a limit of 5 results per page and print the output:
use dotenvy::dotenv;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Load environment variables from .env file
dotenv()?;
// Initialize and build CKAN struct
let ckan = ckanaction::CKAN::builder()
.url("http://localhost:5000")
.token(dotenvy::var("CKAN_API_TOKEN")?)
.build();
// Send request to /package_list and print output
let result = ckan.package_list()
.limit(5) // <-- This is an optional parameter you can remove
.call()
.await?;
println!("{result:#?}");
Ok(())
}
The following examples won't include the boilerplate code.
Create a new package (dataset) with custom fields:
let custom_fields = serde_json::json!({
"data_contact_email": "support@dathere.com",
"update_frequency": "daily",
"related_resources": [],
});
let result = ckan.package_create()
.name("my-new-package".to_string())
.custom_fields(custom_fields)
.private(false)
.call()
.await?;
println!("{result:#?}");
Create a new resource with a new file from a file path:
let path_buf = current_dir()?.join("data.csv");
let result = ckan
.resource_create()
.package_id("3mz0qhbb-cdb0-ewst-x7c0-casnkwv0edub".to_string())
.name("My new resource".to_string())
.format("CSV".to_string())
.upload(path_buf)
.call()
.await?;
println!("{result:#?}");
Some endpoints without any parameters may not need a builder such as /status_show
so there is no .call()
method after .status_show()
:
let status_show = ckan.status_show().await?;
println!("{status_show:#?}");
Notes
- If you use a
maybe_fn()
then if you provideNone
it will be ignored and that parameter will not be added to the JSON body. This library assumesNone
would not be provided as a value (since the cases where it is a value is often the default value that the CKAN API already has set for that parameter).
Dependencies
~9–24MB
~266K SLoC