4 releases (2 breaking)
0.8.0 | Nov 3, 2023 |
---|---|
0.7.0 | Nov 3, 2023 |
0.6.3 | Nov 2, 2023 |
0.6.2 | Nov 2, 2023 |
#78 in #reflection
98KB
2.5K
SLoC
Avocado Schema Derive
Avocado Schema defines the following enum FieldValue
for runtime reflection of struct
's structure and values:
#[derive(Debug, Clone, PartialEq)]
pub enum FieldValue {
String(String),
Integer(i64),
UInteger(u64),
Float(f64),
Boolean(bool),
Object(BTreeMap<String, FieldValue>),
Array(Vec<FieldValue>),
Email(EmailAddress),
DateTime(DateTime<Utc>),
Date(NaiveDate),
Time(NaiveTime),
Null,
}
This macro Reflect
is for deriving FieldValue
enum for struct
:
#[derive(Reflect)]
struct Client {
#[reflect("firstName")]
first_name: String,
#[reflect("lastName")]
last_name: String,
age: u64,
#[reflect(ignore)]
email: String
}
#[test]
fn main() {
let client = Client {
first_name: "Robert".to_string(),
last_name: "Li".to_string(),
age: 30,
email: "admin@avocado.com".to_string(),
};
assert_eq!(
client.field_value(),
FieldValue::Object(BTreeMap::from([
(
"firstName".to_string(),
FieldValue::String("Robert".to_string())
),
("lastName".to_string(), FieldValue::String("Li".to_string())),
("age".to_string(), FieldValue::UInteger(30))
]))
)
}
Dependencies
~7–9.5MB
~166K SLoC