Rust SDK — Serde Data Models#
The FAIR Data JSON Schema project provides auto-generated Rust data structures (serde) for high-performance CLI utilities, data engineering pipelines, and WebAssembly (WASM) tools.
Overview#
The generated Rust models live in schemas/<version>/rust/src/lib.rs (and mirrored in the web distribution at dist/<version>/rust/lib.rs).
It provides:
Serde-annotated Data Structs:
DatasetSchema,SchemaNode,TemporalCoverage,DatasetRelationType Enums:
I18nString(text string vs language map),I18nText,JsonType
Dependencies (Cargo.toml)#
To deserialize or serialize FAIR JSON schemas in your Rust project, add serde and serde_json:
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
Basic Usage#
Deserializing a FAIR Schema from JSON#
use serde_json::Result;
use fair_data_schema::DatasetSchema;
fn parse_schema(json_data: &str) -> Result<DatasetSchema> {
let schema: DatasetSchema = serde_json::from_str(json_data)?;
if let Some(title) = &schema.node.title {
println!("Dataset Title: {}", title);
}
if let Some(license) = &schema.node.fair_license {
println!("FAIR License: {:?}", license);
}
Ok(schema)
}
Building & Serializing a Schema Programmatically#
use std::collections::HashMap;
use fair_data_schema::{DatasetSchema, SchemaNode, I18nString};
fn create_schema() -> DatasetSchema {
let mut properties = HashMap::new();
properties.insert(
"age".to_string(),
SchemaNode {
r#type: Some(serde_json::json!("integer")),
title: Some("Age".to_string()),
minimum: Some(0.0),
fair_measurement_unit: Some(I18nString::Text("years".to_string())),
..Default::default()
},
);
DatasetSchema {
schema: Some("https://highvaluedata.net/fair-data-schema/dev".to_string()),
node: SchemaNode {
title: Some("Census 2024".to_string()),
fair_license: Some(I18nString::Text("CC-BY-4.0".to_string())),
properties: Some(properties),
..Default::default()
},
}
}
Auto-Generation#
The Rust definition file schemas/<version>/rust/src/lib.rs is auto-generated from the FAIR annotation meta-schemas using Jinja2 templates.
To regenerate Rust models for the development track:
uv run python scripts/generate_rust.py --version dev