icydb_schema/wire/
metadata.rs1use ic_wire::typescript::{GenerationError, SchemaContext, Wire};
5use serde_json::{Value, json};
6
7use crate::{
8 Date, Decimal, Duration, Float32, Float64, Principal, Subaccount, Timestamp, U256, Ulid,
9};
10
11macro_rules! scalar_metadata {
13 ($ty:ty, $shape:expr) => {
14 impl Wire for $ty {
15 fn native_schema(_: &mut SchemaContext) -> Result<Value, GenerationError> {
16 Ok($shape)
17 }
18 }
19 };
20}
21
22scalar_metadata!(Principal, json!({"k":"bytes","max":29}));
23scalar_metadata!(Subaccount, json!({"k":"bytes","min":32,"max":32}));
24scalar_metadata!(Ulid, json!({"k":"bytes","min":16,"max":16}));
25scalar_metadata!(U256, json!({"k":"bytes","min":32,"max":32}));
26scalar_metadata!(
27 Date,
28 json!({"k":"i","bits":32,"min":Date::MIN.as_days_since_epoch(),"max":Date::MAX.as_days_since_epoch()})
29);
30scalar_metadata!(Decimal, json!({"k":"text","check":"decimal"}));
31scalar_metadata!(Duration, json!({"k":"u","bits":64}));
32scalar_metadata!(Timestamp, json!({"k":"i","bits":64}));
33scalar_metadata!(Float32, json!({"k":"float","bits":32}));
34scalar_metadata!(Float64, json!({"k":"float","bits":64}));
35scalar_metadata!(crate::EntitySourceKey, json!({"k":"text"}));