This guide covers various use cases and patterns for using enrichr-rs
.
The simplest use case involves direct field mapping:
#![allow(unused)]
fn main () {
#[derive(Enrichable, Default)]
struct Person {
name: String ,
age: u32 ,
}
let spec = r#"{
"name": "$.person.name",
"age": "$.person.age"
}"# ;
}
#![allow(unused)]
fn main () {
#[derive(Enrichable, Default)]
struct Employee {
name: String ,
department: Department,
}
#[derive(Enrichable, Default)]
struct Department {
id: String ,
name: String ,
}
let spec = r#"{
"name": "$.employee.personal.full_name",
"department.id": "$.employee.dept.dept_id",
"department.name": "$.employee.dept.dept_name"
}"# ;
}
#![allow(unused)]
fn main () {
#[derive(Enrichable, Default)]
struct Team {
name: String ,
members: Vec <String >,
}
let spec = r#"{
"name": "$.team.name",
"members": "$.team.member_list[*].name"
}"# ;
}
#![allow(unused)]
fn main () {
#[derive(Enrichable, Default)]
struct User {
name: String ,
email: Option <String >,
}
let spec = r#"{
"name": "$.user.name",
"email": "$.user.contact.email"
}"# ;
}
The library handles various type conversions automatically:
#![allow(unused)]
fn main () {
#[derive(Enrichable, Default)]
struct Metrics {
count: u32 ,
enabled: bool ,
ratio: f64 ,
tags: Vec <String >,
}
}
For custom types that implement Deserialize
:
#![allow(unused)]
fn main () {
#[derive(Deserialize)]
enum Status {
Active,
Inactive,
}
#[derive(Enrichable, Default)]
struct Account {
id: String ,
status: Status,
}
}