mirror of
https://github.com/danbulant/convex-macros
synced 2026-06-19 14:31:23 +00:00
64 lines
1.4 KiB
Rust
64 lines
1.4 KiB
Rust
use convex::Value;
|
|
use maplit::btreemap;
|
|
use ragkit_convex_macros::convex_model;
|
|
use serde_json::json;
|
|
|
|
#[test]
|
|
fn basic_discriminated() {
|
|
convex_model!(Model {
|
|
a: v.union(
|
|
v.object({
|
|
t: v.literal("one"),
|
|
value: v.int64(),
|
|
}),
|
|
v.object({
|
|
t: v.literal("two"),
|
|
value: v.string(),
|
|
}),
|
|
),
|
|
});
|
|
|
|
// Try variant 1
|
|
let convex_data = Value::Object(btreemap! {
|
|
"a".into() => Value::Object(btreemap! {
|
|
"t".into() => Value::String("one".into()),
|
|
"value".into() => Value::Int64(42),
|
|
}),
|
|
});
|
|
let json_data = json!({
|
|
"a": {
|
|
"t": "one",
|
|
"value": 42,
|
|
},
|
|
});
|
|
|
|
let model = Model::from_convex_value(&convex_data);
|
|
assert!(model.is_ok());
|
|
let model = model.unwrap();
|
|
let a = model.a.as_1().unwrap();
|
|
assert_eq!("one", a.t);
|
|
assert_eq!(42, a.value);
|
|
assert_eq!(json_data, json!(model));
|
|
|
|
// Try Variant 2
|
|
let convex_data = Value::Object(btreemap! {
|
|
"a".into() => Value::Object(btreemap! {
|
|
"t".into() => Value::String("two".into()),
|
|
"value".into() => Value::String("something".into()),
|
|
}),
|
|
});
|
|
let json_data = json!({
|
|
"a": {
|
|
"t": "two",
|
|
"value": "something",
|
|
},
|
|
});
|
|
|
|
let model = Model::from_convex_value(&convex_data);
|
|
assert!(model.is_ok());
|
|
let model = model.unwrap();
|
|
let a = model.a.as_2().unwrap();
|
|
assert_eq!("two", a.t);
|
|
assert_eq!("something", a.value);
|
|
assert_eq!(json_data, json!(model));
|
|
}
|