Crates.io | json_to_struct |
lib.rs | json_to_struct |
version | 0.1.0 |
source | src |
created_at | 2025-01-20 18:31:09.326461+00 |
updated_at | 2025-01-20 18:31:09.326461+00 |
description | Convert JSON into Rust structs for efficient and type-safe data management. |
homepage | https://github.com/abdullah-albanna/json_to_struct |
repository | https://github.com/abdullah-albanna/json_to_struct |
max_upload_size | |
id | 1524127 |
size | 30,078 |
A procedural macro for generating Rust structs from JSON-like structures with extensive compile-time type safety and configuration options.
@debug
, @snake
, @derive
.Add this crate as a dependency in your Cargo.toml
:
[dependencies]
json_to_struct = "0.1"
use json_to_struct::json2struct;
json2struct!(User {
"first_name" => "John",
"last_name" => "Doe",
"age" => 30
});
#[derive(Clone, Deserialize, Serialize)]
struct User {
#[serde(alias = "first_name")]
first_name: String,
#[serde(alias = "last_name")]
last_name: String,
#[serde(alias = "age")]
age: f64,
}
json2struct!(Company @debug @camel @derive(PartialEq) @store_json {
"company_name" => "Acme Corp",
"employees" => [
{
"id" => 1,
"details" => {
"email" => "john@example.com",
"department" => "Engineering"
}
}
]
});
This example generates nested structs, debug derives, and a static JSON value
static COMPANY_JSON_VALUE: LazyLock<Value> = LazyLock::new(|| {
serde_json::from_str(
"{\"company_name\":\"Acme Corp\",\"employees\":[{\"details\":{\"department\":\"Engineering\",\"email\":\"john@example.com\"},\"id\":1.0}]}"
).expect("Couldn't convert the text into valid json")
});
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
struct Company {
#[serde(alias = "company_name")]
company_name: String,
#[serde(alias = "employees")]
employees: Vec<Employee>,
}
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
struct Employee {
#[serde(alias = "id")]
id: f64,
#[serde(alias = "details")]
details: Details,
}
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
struct Details {
#[serde(alias = "email")]
email: String,
#[serde(alias = "department")]
department: String,
}
Flag | Description | Example |
---|---|---|
@debug |
Adds Debug derive |
@debug |
@snake |
Renames fields to snake_case |
@snake |
@camel |
Renames fields to camelCase |
@camel |
@pascal |
Renames fields to PascalCase |
@pascal |
@derive(Type) |
Adds custom derives | @derive(PartialEq, Clone) |
@store_json |
Generates a static JSON value constant | @store_json |
Contributions are welcome! Please feel free to submit issues or pull requests.
This project is licensed under the MIT License.