lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

dto.rs (82374B)


      1 use dto_bindgen_core::{
      2     BackendId, DefaultKind, EnumDef, EnumRepr, FieldDef, FieldPresence, IdentName, Registry,
      3     RustTypeId, SerializePresence, SourceSpan, StructDef, TargetFieldNames, TargetOverride,
      4     TypeDef, TypeRef, VariantDef, VariantShape, WireFieldNames,
      5 };
      6 
      7 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
      8 enum TypeSpec {
      9     Object {
     10         name: &'static str,
     11         fields: &'static [FieldSpec],
     12     },
     13     Union {
     14         name: &'static str,
     15         variants: &'static [VariantSpec],
     16     },
     17     Alias {
     18         name: &'static str,
     19         target: &'static str,
     20     },
     21 }
     22 
     23 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
     24 enum VariantSpec {
     25     Object(&'static [FieldSpec]),
     26     Ref(&'static str),
     27 }
     28 
     29 #[derive(Clone, Copy, Debug, Eq, PartialEq)]
     30 struct FieldSpec {
     31     name: &'static str,
     32     target: &'static str,
     33     optional: bool,
     34     nullable: bool,
     35 }
     36 
     37 impl FieldSpec {
     38     const fn required(name: &'static str, target: &'static str) -> Self {
     39         Self {
     40             name,
     41             target,
     42             optional: false,
     43             nullable: false,
     44         }
     45     }
     46 
     47     const fn nullable(name: &'static str, target: &'static str) -> Self {
     48         Self {
     49             name,
     50             target,
     51             optional: false,
     52             nullable: true,
     53         }
     54     }
     55 
     56     const fn optional(name: &'static str, target: &'static str) -> Self {
     57         Self {
     58             name,
     59             target,
     60             optional: true,
     61             nullable: false,
     62         }
     63     }
     64 
     65     const fn optional_nullable(name: &'static str, target: &'static str) -> Self {
     66         Self {
     67             name,
     68             target,
     69             optional: true,
     70             nullable: true,
     71         }
     72     }
     73 }
     74 
     75 pub fn dto_registry() -> Registry {
     76     let mut registry = Registry::new();
     77     for spec in TYPE_SPECS {
     78         let name = spec.name();
     79         let type_id = registry.register_type(
     80             RustTypeId::new(env!("CARGO_PKG_NAME"), name),
     81             spec.type_def(),
     82         );
     83         registry.mark_root(type_id);
     84     }
     85     registry
     86 }
     87 
     88 pub fn type_inventory() -> Vec<&'static str> {
     89     TYPE_SPECS.iter().map(TypeSpec::name).collect()
     90 }
     91 
     92 impl TypeSpec {
     93     fn name(&self) -> &'static str {
     94         match self {
     95             Self::Object { name, .. } | Self::Union { name, .. } | Self::Alias { name, .. } => name,
     96         }
     97     }
     98 
     99     fn type_def(&self) -> TypeDef {
    100         match self {
    101             Self::Object { name, fields } => TypeDef::Struct(object_def(name, fields)),
    102             Self::Union { name, variants } => TypeDef::Enum(union_def(name, variants)),
    103             Self::Alias { name, target } => TypeDef::Enum(alias_def(name, target)),
    104         }
    105     }
    106 }
    107 
    108 fn object_def(name: &str, fields: &[FieldSpec]) -> StructDef {
    109     let mut def = StructDef::new(name, name, source_span());
    110     for field in fields {
    111         def = def.with_field(field_def(field));
    112     }
    113     def
    114 }
    115 
    116 fn union_def(name: &str, variants: &[VariantSpec]) -> EnumDef {
    117     let mut def = EnumDef::new(name, name, EnumRepr::Untagged, source_span());
    118     for (index, variant) in variants.iter().enumerate() {
    119         def = def.with_variant(match variant {
    120             VariantSpec::Object(fields) => VariantDef::new(
    121                 format!("Variant{index}"),
    122                 format!("variant{index}"),
    123                 VariantShape::Struct(fields.iter().map(field_def).collect()),
    124                 source_span(),
    125             ),
    126             VariantSpec::Ref(target) => VariantDef::new(
    127                 format!("Variant{index}"),
    128                 format!("variant{index}"),
    129                 VariantShape::Newtype(ts_ref(target)),
    130                 source_span(),
    131             ),
    132         });
    133     }
    134     def
    135 }
    136 
    137 fn alias_def(name: &str, target: &str) -> EnumDef {
    138     EnumDef::new(name, name, EnumRepr::Untagged, source_span()).with_variant(VariantDef::new(
    139         "Alias",
    140         "alias",
    141         VariantShape::Newtype(ts_ref(target)),
    142         source_span(),
    143     ))
    144 }
    145 
    146 fn field_def(field: &FieldSpec) -> FieldDef {
    147     FieldDef::new(
    148         IdentName::new(field.name),
    149         WireFieldNames::same(field.name),
    150         TargetFieldNames::new(field.name, field.name),
    151         ts_ref(field.target),
    152         source_span(),
    153     )
    154     .with_presence(field_presence(field.optional, field.nullable))
    155 }
    156 
    157 fn field_presence(optional: bool, nullable: bool) -> FieldPresence {
    158     match (optional, nullable) {
    159         (false, false) => FieldPresence::required(),
    160         (false, true) => FieldPresence::nullable_required(),
    161         (true, true) => FieldPresence::optional_nullable(),
    162         (true, false) => FieldPresence {
    163             nullable: false,
    164             required_on_deserialize: false,
    165             default: Some(DefaultKind::NoneValue),
    166             serialize_presence: SerializePresence::Always,
    167         },
    168     }
    169 }
    170 
    171 fn ts_ref(target: &str) -> TypeRef {
    172     TypeRef::Override(TargetOverride::new(BackendId::TypeScript, target))
    173 }
    174 
    175 fn source_span() -> SourceSpan {
    176     SourceSpan::new(file!(), line!(), column!())
    177 }
    178 
    179 const TYPE_SPECS: &[TypeSpec] = &[
    180     TypeSpec::Object {
    181         name: "Farm",
    182         fields: &[
    183             FieldSpec::required("id", "string"),
    184             FieldSpec::required("created_at", "string"),
    185             FieldSpec::required("updated_at", "string"),
    186             FieldSpec::required("d_tag", "string"),
    187             FieldSpec::required("pubkey", "string"),
    188             FieldSpec::required("name", "string"),
    189             FieldSpec::nullable("about", "string"),
    190             FieldSpec::nullable("website", "string"),
    191             FieldSpec::nullable("picture", "string"),
    192             FieldSpec::nullable("banner", "string"),
    193             FieldSpec::nullable("location_primary", "string"),
    194             FieldSpec::nullable("location_city", "string"),
    195             FieldSpec::nullable("location_region", "string"),
    196             FieldSpec::nullable("location_country", "string"),
    197         ],
    198     },
    199     TypeSpec::Object {
    200         name: "FarmGcsLocation",
    201         fields: &[
    202             FieldSpec::required("id", "string"),
    203             FieldSpec::required("created_at", "string"),
    204             FieldSpec::required("updated_at", "string"),
    205             FieldSpec::required("farm_id", "string"),
    206             FieldSpec::required("gcs_location_id", "string"),
    207             FieldSpec::required("role", "string"),
    208         ],
    209     },
    210     TypeSpec::Union {
    211         name: "FarmGcsLocationQueryBindValues",
    212         variants: &[
    213             VariantSpec::Object(&[FieldSpec::required("id", "string")]),
    214             VariantSpec::Object(&[FieldSpec::required("farm_id", "string")]),
    215             VariantSpec::Object(&[FieldSpec::required("gcs_location_id", "string")]),
    216         ],
    217     },
    218     TypeSpec::Object {
    219         name: "FarmMember",
    220         fields: &[
    221             FieldSpec::required("id", "string"),
    222             FieldSpec::required("created_at", "string"),
    223             FieldSpec::required("updated_at", "string"),
    224             FieldSpec::required("farm_id", "string"),
    225             FieldSpec::required("member_pubkey", "string"),
    226             FieldSpec::required("role", "string"),
    227         ],
    228     },
    229     TypeSpec::Object {
    230         name: "FarmMemberClaim",
    231         fields: &[
    232             FieldSpec::required("id", "string"),
    233             FieldSpec::required("created_at", "string"),
    234             FieldSpec::required("updated_at", "string"),
    235             FieldSpec::required("member_pubkey", "string"),
    236             FieldSpec::required("farm_pubkey", "string"),
    237         ],
    238     },
    239     TypeSpec::Union {
    240         name: "FarmMemberClaimQueryBindValues",
    241         variants: &[
    242             VariantSpec::Object(&[FieldSpec::required("id", "string")]),
    243             VariantSpec::Object(&[FieldSpec::required("member_pubkey", "string")]),
    244             VariantSpec::Object(&[FieldSpec::required("farm_pubkey", "string")]),
    245         ],
    246     },
    247     TypeSpec::Union {
    248         name: "FarmMemberQueryBindValues",
    249         variants: &[
    250             VariantSpec::Object(&[FieldSpec::required("id", "string")]),
    251             VariantSpec::Object(&[FieldSpec::required("farm_id", "string")]),
    252             VariantSpec::Object(&[FieldSpec::required("member_pubkey", "string")]),
    253         ],
    254     },
    255     TypeSpec::Union {
    256         name: "FarmQueryBindValues",
    257         variants: &[
    258             VariantSpec::Object(&[FieldSpec::required("id", "string")]),
    259             VariantSpec::Object(&[FieldSpec::required("d_tag", "string")]),
    260             VariantSpec::Object(&[FieldSpec::required("pubkey", "string")]),
    261         ],
    262     },
    263     TypeSpec::Object {
    264         name: "FarmTag",
    265         fields: &[
    266             FieldSpec::required("id", "string"),
    267             FieldSpec::required("created_at", "string"),
    268             FieldSpec::required("updated_at", "string"),
    269             FieldSpec::required("farm_id", "string"),
    270             FieldSpec::required("tag", "string"),
    271         ],
    272     },
    273     TypeSpec::Union {
    274         name: "FarmTagQueryBindValues",
    275         variants: &[
    276             VariantSpec::Object(&[FieldSpec::required("id", "string")]),
    277             VariantSpec::Object(&[FieldSpec::required("farm_id", "string")]),
    278             VariantSpec::Object(&[FieldSpec::required("tag", "string")]),
    279         ],
    280     },
    281     TypeSpec::Object {
    282         name: "GcsLocation",
    283         fields: &[
    284             FieldSpec::required("id", "string"),
    285             FieldSpec::required("created_at", "string"),
    286             FieldSpec::required("updated_at", "string"),
    287             FieldSpec::required("d_tag", "string"),
    288             FieldSpec::required("lat", "number"),
    289             FieldSpec::required("lng", "number"),
    290             FieldSpec::required("geohash", "string"),
    291             FieldSpec::required("point", "string"),
    292             FieldSpec::required("polygon", "string"),
    293             FieldSpec::nullable("accuracy", "number"),
    294             FieldSpec::nullable("altitude", "number"),
    295             FieldSpec::nullable("tag_0", "string"),
    296             FieldSpec::nullable("label", "string"),
    297             FieldSpec::nullable("area", "number"),
    298             FieldSpec::nullable("elevation", "number"),
    299             FieldSpec::nullable("soil", "string"),
    300             FieldSpec::nullable("climate", "string"),
    301             FieldSpec::nullable("gc_id", "string"),
    302             FieldSpec::nullable("gc_name", "string"),
    303             FieldSpec::nullable("gc_admin1_id", "string"),
    304             FieldSpec::nullable("gc_admin1_name", "string"),
    305             FieldSpec::nullable("gc_country_id", "string"),
    306             FieldSpec::nullable("gc_country_name", "string"),
    307         ],
    308     },
    309     TypeSpec::Object {
    310         name: "GcsLocationFarmArgs",
    311         fields: &[FieldSpec::required("id", "string")],
    312     },
    313     TypeSpec::Union {
    314         name: "GcsLocationFindManyRel",
    315         variants: &[
    316             VariantSpec::Object(&[FieldSpec::required(
    317                 "on_trade_product",
    318                 "GcsLocationTradeProductArgs",
    319             )]),
    320             VariantSpec::Object(&[FieldSpec::required(
    321                 "off_trade_product",
    322                 "GcsLocationTradeProductArgs",
    323             )]),
    324             VariantSpec::Object(&[FieldSpec::required("on_farm", "GcsLocationFarmArgs")]),
    325             VariantSpec::Object(&[FieldSpec::required("off_farm", "GcsLocationFarmArgs")]),
    326             VariantSpec::Object(&[FieldSpec::required("on_plot", "GcsLocationPlotArgs")]),
    327             VariantSpec::Object(&[FieldSpec::required("off_plot", "GcsLocationPlotArgs")]),
    328         ],
    329     },
    330     TypeSpec::Object {
    331         name: "GcsLocationPlotArgs",
    332         fields: &[FieldSpec::required("id", "string")],
    333     },
    334     TypeSpec::Union {
    335         name: "GcsLocationQueryBindValues",
    336         variants: &[
    337             VariantSpec::Object(&[FieldSpec::required("id", "string")]),
    338             VariantSpec::Object(&[FieldSpec::required("d_tag", "string")]),
    339             VariantSpec::Object(&[FieldSpec::required("geohash", "string")]),
    340         ],
    341     },
    342     TypeSpec::Object {
    343         name: "GcsLocationTradeProductArgs",
    344         fields: &[FieldSpec::required("id", "string")],
    345     },
    346     TypeSpec::Alias {
    347         name: "IFarmCreate",
    348         target: "IFarmFields",
    349     },
    350     TypeSpec::Alias {
    351         name: "IFarmCreateResolve",
    352         target: "IResult<Farm>",
    353     },
    354     TypeSpec::Alias {
    355         name: "IFarmDelete",
    356         target: "IFarmFindOne",
    357     },
    358     TypeSpec::Alias {
    359         name: "IFarmDeleteResolve",
    360         target: "IResult<string>",
    361     },
    362     TypeSpec::Object {
    363         name: "IFarmFields",
    364         fields: &[
    365             FieldSpec::required("d_tag", "string"),
    366             FieldSpec::required("pubkey", "string"),
    367             FieldSpec::required("name", "string"),
    368             FieldSpec::optional_nullable("about", "string"),
    369             FieldSpec::optional_nullable("website", "string"),
    370             FieldSpec::optional_nullable("picture", "string"),
    371             FieldSpec::optional_nullable("banner", "string"),
    372             FieldSpec::optional_nullable("location_primary", "string"),
    373             FieldSpec::optional_nullable("location_city", "string"),
    374             FieldSpec::optional_nullable("location_region", "string"),
    375             FieldSpec::optional_nullable("location_country", "string"),
    376         ],
    377     },
    378     TypeSpec::Object {
    379         name: "IFarmFieldsFilter",
    380         fields: &[
    381             FieldSpec::optional("id", "string"),
    382             FieldSpec::optional("created_at", "string"),
    383             FieldSpec::optional("updated_at", "string"),
    384             FieldSpec::optional("d_tag", "string"),
    385             FieldSpec::optional("pubkey", "string"),
    386             FieldSpec::optional("name", "string"),
    387             FieldSpec::optional("about", "string"),
    388             FieldSpec::optional("website", "string"),
    389             FieldSpec::optional("picture", "string"),
    390             FieldSpec::optional("banner", "string"),
    391             FieldSpec::optional("location_primary", "string"),
    392             FieldSpec::optional("location_city", "string"),
    393             FieldSpec::optional("location_region", "string"),
    394             FieldSpec::optional("location_country", "string"),
    395         ],
    396     },
    397     TypeSpec::Object {
    398         name: "IFarmFieldsPartial",
    399         fields: &[
    400             FieldSpec::optional_nullable("d_tag", "ReplicaDbJsonValue"),
    401             FieldSpec::optional_nullable("pubkey", "ReplicaDbJsonValue"),
    402             FieldSpec::optional_nullable("name", "ReplicaDbJsonValue"),
    403             FieldSpec::optional_nullable("about", "ReplicaDbJsonValue"),
    404             FieldSpec::optional_nullable("website", "ReplicaDbJsonValue"),
    405             FieldSpec::optional_nullable("picture", "ReplicaDbJsonValue"),
    406             FieldSpec::optional_nullable("banner", "ReplicaDbJsonValue"),
    407             FieldSpec::optional_nullable("location_primary", "ReplicaDbJsonValue"),
    408             FieldSpec::optional_nullable("location_city", "ReplicaDbJsonValue"),
    409             FieldSpec::optional_nullable("location_region", "ReplicaDbJsonValue"),
    410             FieldSpec::optional_nullable("location_country", "ReplicaDbJsonValue"),
    411         ],
    412     },
    413     TypeSpec::Alias {
    414         name: "IFarmFindMany",
    415         target: "IFarmFindManyArgs",
    416     },
    417     TypeSpec::Object {
    418         name: "IFarmFindManyArgs",
    419         fields: &[FieldSpec::nullable("filter", "IFarmFieldsFilter")],
    420     },
    421     TypeSpec::Alias {
    422         name: "IFarmFindManyResolve",
    423         target: "IResultList<Farm>",
    424     },
    425     TypeSpec::Union {
    426         name: "IFarmFindOne",
    427         variants: &[VariantSpec::Ref("IFarmFindOneArgs")],
    428     },
    429     TypeSpec::Object {
    430         name: "IFarmFindOneArgs",
    431         fields: &[FieldSpec::required("on", "FarmQueryBindValues")],
    432     },
    433     TypeSpec::Alias {
    434         name: "IFarmFindOneResolve",
    435         target: "IResult<Farm | null>",
    436     },
    437     TypeSpec::Alias {
    438         name: "IFarmGcsLocationCreate",
    439         target: "IFarmGcsLocationFields",
    440     },
    441     TypeSpec::Alias {
    442         name: "IFarmGcsLocationCreateResolve",
    443         target: "IResult<FarmGcsLocation>",
    444     },
    445     TypeSpec::Alias {
    446         name: "IFarmGcsLocationDelete",
    447         target: "IFarmGcsLocationFindOne",
    448     },
    449     TypeSpec::Alias {
    450         name: "IFarmGcsLocationDeleteResolve",
    451         target: "IResult<string>",
    452     },
    453     TypeSpec::Object {
    454         name: "IFarmGcsLocationFields",
    455         fields: &[
    456             FieldSpec::required("farm_id", "string"),
    457             FieldSpec::required("gcs_location_id", "string"),
    458             FieldSpec::required("role", "string"),
    459         ],
    460     },
    461     TypeSpec::Object {
    462         name: "IFarmGcsLocationFieldsFilter",
    463         fields: &[
    464             FieldSpec::optional("id", "string"),
    465             FieldSpec::optional("created_at", "string"),
    466             FieldSpec::optional("updated_at", "string"),
    467             FieldSpec::optional("farm_id", "string"),
    468             FieldSpec::optional("gcs_location_id", "string"),
    469             FieldSpec::optional("role", "string"),
    470         ],
    471     },
    472     TypeSpec::Object {
    473         name: "IFarmGcsLocationFieldsPartial",
    474         fields: &[
    475             FieldSpec::optional_nullable("farm_id", "ReplicaDbJsonValue"),
    476             FieldSpec::optional_nullable("gcs_location_id", "ReplicaDbJsonValue"),
    477             FieldSpec::optional_nullable("role", "ReplicaDbJsonValue"),
    478         ],
    479     },
    480     TypeSpec::Alias {
    481         name: "IFarmGcsLocationFindMany",
    482         target: "IFarmGcsLocationFindManyArgs",
    483     },
    484     TypeSpec::Object {
    485         name: "IFarmGcsLocationFindManyArgs",
    486         fields: &[FieldSpec::nullable(
    487             "filter",
    488             "IFarmGcsLocationFieldsFilter",
    489         )],
    490     },
    491     TypeSpec::Alias {
    492         name: "IFarmGcsLocationFindManyResolve",
    493         target: "IResultList<FarmGcsLocation>",
    494     },
    495     TypeSpec::Union {
    496         name: "IFarmGcsLocationFindOne",
    497         variants: &[VariantSpec::Ref("IFarmGcsLocationFindOneArgs")],
    498     },
    499     TypeSpec::Object {
    500         name: "IFarmGcsLocationFindOneArgs",
    501         fields: &[FieldSpec::required("on", "FarmGcsLocationQueryBindValues")],
    502     },
    503     TypeSpec::Alias {
    504         name: "IFarmGcsLocationFindOneResolve",
    505         target: "IResult<FarmGcsLocation | null>",
    506     },
    507     TypeSpec::Alias {
    508         name: "IFarmGcsLocationUpdate",
    509         target: "IFarmGcsLocationUpdateArgs",
    510     },
    511     TypeSpec::Object {
    512         name: "IFarmGcsLocationUpdateArgs",
    513         fields: &[
    514             FieldSpec::required("on", "FarmGcsLocationQueryBindValues"),
    515             FieldSpec::required("fields", "IFarmGcsLocationFieldsPartial"),
    516         ],
    517     },
    518     TypeSpec::Alias {
    519         name: "IFarmGcsLocationUpdateResolve",
    520         target: "IResult<FarmGcsLocation>",
    521     },
    522     TypeSpec::Alias {
    523         name: "IFarmMemberClaimCreate",
    524         target: "IFarmMemberClaimFields",
    525     },
    526     TypeSpec::Alias {
    527         name: "IFarmMemberClaimCreateResolve",
    528         target: "IResult<FarmMemberClaim>",
    529     },
    530     TypeSpec::Alias {
    531         name: "IFarmMemberClaimDelete",
    532         target: "IFarmMemberClaimFindOne",
    533     },
    534     TypeSpec::Alias {
    535         name: "IFarmMemberClaimDeleteResolve",
    536         target: "IResult<string>",
    537     },
    538     TypeSpec::Object {
    539         name: "IFarmMemberClaimFields",
    540         fields: &[
    541             FieldSpec::required("member_pubkey", "string"),
    542             FieldSpec::required("farm_pubkey", "string"),
    543         ],
    544     },
    545     TypeSpec::Object {
    546         name: "IFarmMemberClaimFieldsFilter",
    547         fields: &[
    548             FieldSpec::optional("id", "string"),
    549             FieldSpec::optional("created_at", "string"),
    550             FieldSpec::optional("updated_at", "string"),
    551             FieldSpec::optional("member_pubkey", "string"),
    552             FieldSpec::optional("farm_pubkey", "string"),
    553         ],
    554     },
    555     TypeSpec::Object {
    556         name: "IFarmMemberClaimFieldsPartial",
    557         fields: &[
    558             FieldSpec::optional_nullable("member_pubkey", "ReplicaDbJsonValue"),
    559             FieldSpec::optional_nullable("farm_pubkey", "ReplicaDbJsonValue"),
    560         ],
    561     },
    562     TypeSpec::Alias {
    563         name: "IFarmMemberClaimFindMany",
    564         target: "IFarmMemberClaimFindManyArgs",
    565     },
    566     TypeSpec::Object {
    567         name: "IFarmMemberClaimFindManyArgs",
    568         fields: &[FieldSpec::nullable(
    569             "filter",
    570             "IFarmMemberClaimFieldsFilter",
    571         )],
    572     },
    573     TypeSpec::Alias {
    574         name: "IFarmMemberClaimFindManyResolve",
    575         target: "IResultList<FarmMemberClaim>",
    576     },
    577     TypeSpec::Union {
    578         name: "IFarmMemberClaimFindOne",
    579         variants: &[VariantSpec::Ref("IFarmMemberClaimFindOneArgs")],
    580     },
    581     TypeSpec::Object {
    582         name: "IFarmMemberClaimFindOneArgs",
    583         fields: &[FieldSpec::required("on", "FarmMemberClaimQueryBindValues")],
    584     },
    585     TypeSpec::Alias {
    586         name: "IFarmMemberClaimFindOneResolve",
    587         target: "IResult<FarmMemberClaim | null>",
    588     },
    589     TypeSpec::Alias {
    590         name: "IFarmMemberClaimUpdate",
    591         target: "IFarmMemberClaimUpdateArgs",
    592     },
    593     TypeSpec::Object {
    594         name: "IFarmMemberClaimUpdateArgs",
    595         fields: &[
    596             FieldSpec::required("on", "FarmMemberClaimQueryBindValues"),
    597             FieldSpec::required("fields", "IFarmMemberClaimFieldsPartial"),
    598         ],
    599     },
    600     TypeSpec::Alias {
    601         name: "IFarmMemberClaimUpdateResolve",
    602         target: "IResult<FarmMemberClaim>",
    603     },
    604     TypeSpec::Alias {
    605         name: "IFarmMemberCreate",
    606         target: "IFarmMemberFields",
    607     },
    608     TypeSpec::Alias {
    609         name: "IFarmMemberCreateResolve",
    610         target: "IResult<FarmMember>",
    611     },
    612     TypeSpec::Alias {
    613         name: "IFarmMemberDelete",
    614         target: "IFarmMemberFindOne",
    615     },
    616     TypeSpec::Alias {
    617         name: "IFarmMemberDeleteResolve",
    618         target: "IResult<string>",
    619     },
    620     TypeSpec::Object {
    621         name: "IFarmMemberFields",
    622         fields: &[
    623             FieldSpec::required("farm_id", "string"),
    624             FieldSpec::required("member_pubkey", "string"),
    625             FieldSpec::required("role", "string"),
    626         ],
    627     },
    628     TypeSpec::Object {
    629         name: "IFarmMemberFieldsFilter",
    630         fields: &[
    631             FieldSpec::optional("id", "string"),
    632             FieldSpec::optional("created_at", "string"),
    633             FieldSpec::optional("updated_at", "string"),
    634             FieldSpec::optional("farm_id", "string"),
    635             FieldSpec::optional("member_pubkey", "string"),
    636             FieldSpec::optional("role", "string"),
    637         ],
    638     },
    639     TypeSpec::Object {
    640         name: "IFarmMemberFieldsPartial",
    641         fields: &[
    642             FieldSpec::optional_nullable("farm_id", "ReplicaDbJsonValue"),
    643             FieldSpec::optional_nullable("member_pubkey", "ReplicaDbJsonValue"),
    644             FieldSpec::optional_nullable("role", "ReplicaDbJsonValue"),
    645         ],
    646     },
    647     TypeSpec::Alias {
    648         name: "IFarmMemberFindMany",
    649         target: "IFarmMemberFindManyArgs",
    650     },
    651     TypeSpec::Object {
    652         name: "IFarmMemberFindManyArgs",
    653         fields: &[FieldSpec::nullable("filter", "IFarmMemberFieldsFilter")],
    654     },
    655     TypeSpec::Alias {
    656         name: "IFarmMemberFindManyResolve",
    657         target: "IResultList<FarmMember>",
    658     },
    659     TypeSpec::Union {
    660         name: "IFarmMemberFindOne",
    661         variants: &[VariantSpec::Ref("IFarmMemberFindOneArgs")],
    662     },
    663     TypeSpec::Object {
    664         name: "IFarmMemberFindOneArgs",
    665         fields: &[FieldSpec::required("on", "FarmMemberQueryBindValues")],
    666     },
    667     TypeSpec::Alias {
    668         name: "IFarmMemberFindOneResolve",
    669         target: "IResult<FarmMember | null>",
    670     },
    671     TypeSpec::Alias {
    672         name: "IFarmMemberUpdate",
    673         target: "IFarmMemberUpdateArgs",
    674     },
    675     TypeSpec::Object {
    676         name: "IFarmMemberUpdateArgs",
    677         fields: &[
    678             FieldSpec::required("on", "FarmMemberQueryBindValues"),
    679             FieldSpec::required("fields", "IFarmMemberFieldsPartial"),
    680         ],
    681     },
    682     TypeSpec::Alias {
    683         name: "IFarmMemberUpdateResolve",
    684         target: "IResult<FarmMember>",
    685     },
    686     TypeSpec::Alias {
    687         name: "IFarmTagCreate",
    688         target: "IFarmTagFields",
    689     },
    690     TypeSpec::Alias {
    691         name: "IFarmTagCreateResolve",
    692         target: "IResult<FarmTag>",
    693     },
    694     TypeSpec::Alias {
    695         name: "IFarmTagDelete",
    696         target: "IFarmTagFindOne",
    697     },
    698     TypeSpec::Alias {
    699         name: "IFarmTagDeleteResolve",
    700         target: "IResult<string>",
    701     },
    702     TypeSpec::Object {
    703         name: "IFarmTagFields",
    704         fields: &[
    705             FieldSpec::required("farm_id", "string"),
    706             FieldSpec::required("tag", "string"),
    707         ],
    708     },
    709     TypeSpec::Object {
    710         name: "IFarmTagFieldsFilter",
    711         fields: &[
    712             FieldSpec::optional("id", "string"),
    713             FieldSpec::optional("created_at", "string"),
    714             FieldSpec::optional("updated_at", "string"),
    715             FieldSpec::optional("farm_id", "string"),
    716             FieldSpec::optional("tag", "string"),
    717         ],
    718     },
    719     TypeSpec::Object {
    720         name: "IFarmTagFieldsPartial",
    721         fields: &[
    722             FieldSpec::optional_nullable("farm_id", "ReplicaDbJsonValue"),
    723             FieldSpec::optional_nullable("tag", "ReplicaDbJsonValue"),
    724         ],
    725     },
    726     TypeSpec::Alias {
    727         name: "IFarmTagFindMany",
    728         target: "IFarmTagFindManyArgs",
    729     },
    730     TypeSpec::Object {
    731         name: "IFarmTagFindManyArgs",
    732         fields: &[FieldSpec::nullable("filter", "IFarmTagFieldsFilter")],
    733     },
    734     TypeSpec::Alias {
    735         name: "IFarmTagFindManyResolve",
    736         target: "IResultList<FarmTag>",
    737     },
    738     TypeSpec::Union {
    739         name: "IFarmTagFindOne",
    740         variants: &[VariantSpec::Ref("IFarmTagFindOneArgs")],
    741     },
    742     TypeSpec::Object {
    743         name: "IFarmTagFindOneArgs",
    744         fields: &[FieldSpec::required("on", "FarmTagQueryBindValues")],
    745     },
    746     TypeSpec::Alias {
    747         name: "IFarmTagFindOneResolve",
    748         target: "IResult<FarmTag | null>",
    749     },
    750     TypeSpec::Alias {
    751         name: "IFarmTagUpdate",
    752         target: "IFarmTagUpdateArgs",
    753     },
    754     TypeSpec::Object {
    755         name: "IFarmTagUpdateArgs",
    756         fields: &[
    757             FieldSpec::required("on", "FarmTagQueryBindValues"),
    758             FieldSpec::required("fields", "IFarmTagFieldsPartial"),
    759         ],
    760     },
    761     TypeSpec::Alias {
    762         name: "IFarmTagUpdateResolve",
    763         target: "IResult<FarmTag>",
    764     },
    765     TypeSpec::Alias {
    766         name: "IFarmUpdate",
    767         target: "IFarmUpdateArgs",
    768     },
    769     TypeSpec::Object {
    770         name: "IFarmUpdateArgs",
    771         fields: &[
    772             FieldSpec::required("on", "FarmQueryBindValues"),
    773             FieldSpec::required("fields", "IFarmFieldsPartial"),
    774         ],
    775     },
    776     TypeSpec::Alias {
    777         name: "IFarmUpdateResolve",
    778         target: "IResult<Farm>",
    779     },
    780     TypeSpec::Alias {
    781         name: "IGcsLocationCreate",
    782         target: "IGcsLocationFields",
    783     },
    784     TypeSpec::Alias {
    785         name: "IGcsLocationCreateResolve",
    786         target: "IResult<GcsLocation>",
    787     },
    788     TypeSpec::Alias {
    789         name: "IGcsLocationDelete",
    790         target: "IGcsLocationFindOne",
    791     },
    792     TypeSpec::Alias {
    793         name: "IGcsLocationDeleteResolve",
    794         target: "IResult<string>",
    795     },
    796     TypeSpec::Object {
    797         name: "IGcsLocationFields",
    798         fields: &[
    799             FieldSpec::required("d_tag", "string"),
    800             FieldSpec::required("lat", "number"),
    801             FieldSpec::required("lng", "number"),
    802             FieldSpec::required("geohash", "string"),
    803             FieldSpec::required("point", "string"),
    804             FieldSpec::required("polygon", "string"),
    805             FieldSpec::optional_nullable("accuracy", "number"),
    806             FieldSpec::optional_nullable("altitude", "number"),
    807             FieldSpec::optional_nullable("tag_0", "string"),
    808             FieldSpec::optional_nullable("label", "string"),
    809             FieldSpec::optional_nullable("area", "number"),
    810             FieldSpec::optional_nullable("elevation", "number"),
    811             FieldSpec::optional_nullable("soil", "string"),
    812             FieldSpec::optional_nullable("climate", "string"),
    813             FieldSpec::optional_nullable("gc_id", "string"),
    814             FieldSpec::optional_nullable("gc_name", "string"),
    815             FieldSpec::optional_nullable("gc_admin1_id", "string"),
    816             FieldSpec::optional_nullable("gc_admin1_name", "string"),
    817             FieldSpec::optional_nullable("gc_country_id", "string"),
    818             FieldSpec::optional_nullable("gc_country_name", "string"),
    819         ],
    820     },
    821     TypeSpec::Object {
    822         name: "IGcsLocationFieldsFilter",
    823         fields: &[
    824             FieldSpec::optional("id", "string"),
    825             FieldSpec::optional("created_at", "string"),
    826             FieldSpec::optional("updated_at", "string"),
    827             FieldSpec::optional("d_tag", "string"),
    828             FieldSpec::optional("lat", "number"),
    829             FieldSpec::optional("lng", "number"),
    830             FieldSpec::optional("geohash", "string"),
    831             FieldSpec::optional("point", "string"),
    832             FieldSpec::optional("polygon", "string"),
    833             FieldSpec::optional("accuracy", "number"),
    834             FieldSpec::optional("altitude", "number"),
    835             FieldSpec::optional("tag_0", "string"),
    836             FieldSpec::optional("label", "string"),
    837             FieldSpec::optional("area", "number"),
    838             FieldSpec::optional("elevation", "number"),
    839             FieldSpec::optional("soil", "string"),
    840             FieldSpec::optional("climate", "string"),
    841             FieldSpec::optional("gc_id", "string"),
    842             FieldSpec::optional("gc_name", "string"),
    843             FieldSpec::optional("gc_admin1_id", "string"),
    844             FieldSpec::optional("gc_admin1_name", "string"),
    845             FieldSpec::optional("gc_country_id", "string"),
    846             FieldSpec::optional("gc_country_name", "string"),
    847         ],
    848     },
    849     TypeSpec::Object {
    850         name: "IGcsLocationFieldsPartial",
    851         fields: &[
    852             FieldSpec::optional_nullable("d_tag", "ReplicaDbJsonValue"),
    853             FieldSpec::optional_nullable("lat", "ReplicaDbJsonValue"),
    854             FieldSpec::optional_nullable("lng", "ReplicaDbJsonValue"),
    855             FieldSpec::optional_nullable("geohash", "ReplicaDbJsonValue"),
    856             FieldSpec::optional_nullable("point", "ReplicaDbJsonValue"),
    857             FieldSpec::optional_nullable("polygon", "ReplicaDbJsonValue"),
    858             FieldSpec::optional_nullable("accuracy", "ReplicaDbJsonValue"),
    859             FieldSpec::optional_nullable("altitude", "ReplicaDbJsonValue"),
    860             FieldSpec::optional_nullable("tag_0", "ReplicaDbJsonValue"),
    861             FieldSpec::optional_nullable("label", "ReplicaDbJsonValue"),
    862             FieldSpec::optional_nullable("area", "ReplicaDbJsonValue"),
    863             FieldSpec::optional_nullable("elevation", "ReplicaDbJsonValue"),
    864             FieldSpec::optional_nullable("soil", "ReplicaDbJsonValue"),
    865             FieldSpec::optional_nullable("climate", "ReplicaDbJsonValue"),
    866             FieldSpec::optional_nullable("gc_id", "ReplicaDbJsonValue"),
    867             FieldSpec::optional_nullable("gc_name", "ReplicaDbJsonValue"),
    868             FieldSpec::optional_nullable("gc_admin1_id", "ReplicaDbJsonValue"),
    869             FieldSpec::optional_nullable("gc_admin1_name", "ReplicaDbJsonValue"),
    870             FieldSpec::optional_nullable("gc_country_id", "ReplicaDbJsonValue"),
    871             FieldSpec::optional_nullable("gc_country_name", "ReplicaDbJsonValue"),
    872         ],
    873     },
    874     TypeSpec::Union {
    875         name: "IGcsLocationFindMany",
    876         variants: &[
    877             VariantSpec::Object(&[FieldSpec::nullable("filter", "IGcsLocationFieldsFilter")]),
    878             VariantSpec::Object(&[FieldSpec::required("rel", "GcsLocationFindManyRel")]),
    879         ],
    880     },
    881     TypeSpec::Alias {
    882         name: "IGcsLocationFindManyResolve",
    883         target: "IResultList<GcsLocation>",
    884     },
    885     TypeSpec::Union {
    886         name: "IGcsLocationFindOne",
    887         variants: &[
    888             VariantSpec::Ref("IGcsLocationFindOneArgs"),
    889             VariantSpec::Ref("IGcsLocationFindOneRelArgs"),
    890         ],
    891     },
    892     TypeSpec::Object {
    893         name: "IGcsLocationFindOneArgs",
    894         fields: &[FieldSpec::required("on", "GcsLocationQueryBindValues")],
    895     },
    896     TypeSpec::Object {
    897         name: "IGcsLocationFindOneRelArgs",
    898         fields: &[FieldSpec::required("rel", "GcsLocationFindManyRel")],
    899     },
    900     TypeSpec::Alias {
    901         name: "IGcsLocationFindOneResolve",
    902         target: "IResult<GcsLocation | null>",
    903     },
    904     TypeSpec::Alias {
    905         name: "IGcsLocationUpdate",
    906         target: "IGcsLocationUpdateArgs",
    907     },
    908     TypeSpec::Object {
    909         name: "IGcsLocationUpdateArgs",
    910         fields: &[
    911             FieldSpec::required("on", "GcsLocationQueryBindValues"),
    912             FieldSpec::required("fields", "IGcsLocationFieldsPartial"),
    913         ],
    914     },
    915     TypeSpec::Alias {
    916         name: "IGcsLocationUpdateResolve",
    917         target: "IResult<GcsLocation>",
    918     },
    919     TypeSpec::Alias {
    920         name: "ILogErrorCreate",
    921         target: "ILogErrorFields",
    922     },
    923     TypeSpec::Alias {
    924         name: "ILogErrorCreateResolve",
    925         target: "IResult<LogError>",
    926     },
    927     TypeSpec::Alias {
    928         name: "ILogErrorDelete",
    929         target: "ILogErrorFindOne",
    930     },
    931     TypeSpec::Alias {
    932         name: "ILogErrorDeleteResolve",
    933         target: "IResult<string>",
    934     },
    935     TypeSpec::Object {
    936         name: "ILogErrorFields",
    937         fields: &[
    938             FieldSpec::required("error", "string"),
    939             FieldSpec::required("message", "string"),
    940             FieldSpec::optional_nullable("stack_trace", "string"),
    941             FieldSpec::optional_nullable("cause", "string"),
    942             FieldSpec::required("app_system", "string"),
    943             FieldSpec::required("app_version", "string"),
    944             FieldSpec::required("nostr_pubkey", "string"),
    945             FieldSpec::optional_nullable("data", "string"),
    946         ],
    947     },
    948     TypeSpec::Object {
    949         name: "ILogErrorFieldsFilter",
    950         fields: &[
    951             FieldSpec::optional("id", "string"),
    952             FieldSpec::optional("created_at", "string"),
    953             FieldSpec::optional("updated_at", "string"),
    954             FieldSpec::optional("error", "string"),
    955             FieldSpec::optional("message", "string"),
    956             FieldSpec::optional("stack_trace", "string"),
    957             FieldSpec::optional("cause", "string"),
    958             FieldSpec::optional("app_system", "string"),
    959             FieldSpec::optional("app_version", "string"),
    960             FieldSpec::optional("nostr_pubkey", "string"),
    961             FieldSpec::optional("data", "string"),
    962         ],
    963     },
    964     TypeSpec::Object {
    965         name: "ILogErrorFieldsPartial",
    966         fields: &[
    967             FieldSpec::optional_nullable("error", "ReplicaDbJsonValue"),
    968             FieldSpec::optional_nullable("message", "ReplicaDbJsonValue"),
    969             FieldSpec::optional_nullable("stack_trace", "ReplicaDbJsonValue"),
    970             FieldSpec::optional_nullable("cause", "ReplicaDbJsonValue"),
    971             FieldSpec::optional_nullable("app_system", "ReplicaDbJsonValue"),
    972             FieldSpec::optional_nullable("app_version", "ReplicaDbJsonValue"),
    973             FieldSpec::optional_nullable("nostr_pubkey", "ReplicaDbJsonValue"),
    974             FieldSpec::optional_nullable("data", "ReplicaDbJsonValue"),
    975         ],
    976     },
    977     TypeSpec::Alias {
    978         name: "ILogErrorFindMany",
    979         target: "ILogErrorFindManyArgs",
    980     },
    981     TypeSpec::Object {
    982         name: "ILogErrorFindManyArgs",
    983         fields: &[FieldSpec::nullable("filter", "ILogErrorFieldsFilter")],
    984     },
    985     TypeSpec::Alias {
    986         name: "ILogErrorFindManyResolve",
    987         target: "IResultList<LogError>",
    988     },
    989     TypeSpec::Union {
    990         name: "ILogErrorFindOne",
    991         variants: &[VariantSpec::Ref("ILogErrorFindOneArgs")],
    992     },
    993     TypeSpec::Object {
    994         name: "ILogErrorFindOneArgs",
    995         fields: &[FieldSpec::required("on", "LogErrorQueryBindValues")],
    996     },
    997     TypeSpec::Alias {
    998         name: "ILogErrorFindOneResolve",
    999         target: "IResult<LogError | null>",
   1000     },
   1001     TypeSpec::Alias {
   1002         name: "ILogErrorUpdate",
   1003         target: "ILogErrorUpdateArgs",
   1004     },
   1005     TypeSpec::Object {
   1006         name: "ILogErrorUpdateArgs",
   1007         fields: &[
   1008             FieldSpec::required("on", "LogErrorQueryBindValues"),
   1009             FieldSpec::required("fields", "ILogErrorFieldsPartial"),
   1010         ],
   1011     },
   1012     TypeSpec::Alias {
   1013         name: "ILogErrorUpdateResolve",
   1014         target: "IResult<LogError>",
   1015     },
   1016     TypeSpec::Alias {
   1017         name: "IMediaImageCreate",
   1018         target: "IMediaImageFields",
   1019     },
   1020     TypeSpec::Alias {
   1021         name: "IMediaImageCreateResolve",
   1022         target: "IResult<MediaImage>",
   1023     },
   1024     TypeSpec::Alias {
   1025         name: "IMediaImageDelete",
   1026         target: "IMediaImageFindOne",
   1027     },
   1028     TypeSpec::Alias {
   1029         name: "IMediaImageDeleteResolve",
   1030         target: "IResult<string>",
   1031     },
   1032     TypeSpec::Object {
   1033         name: "IMediaImageFields",
   1034         fields: &[
   1035             FieldSpec::required("file_path", "string"),
   1036             FieldSpec::required("mime_type", "string"),
   1037             FieldSpec::required("res_base", "string"),
   1038             FieldSpec::required("res_path", "string"),
   1039             FieldSpec::optional_nullable("label", "string"),
   1040             FieldSpec::optional_nullable("description", "string"),
   1041         ],
   1042     },
   1043     TypeSpec::Object {
   1044         name: "IMediaImageFieldsFilter",
   1045         fields: &[
   1046             FieldSpec::optional("id", "string"),
   1047             FieldSpec::optional("created_at", "string"),
   1048             FieldSpec::optional("updated_at", "string"),
   1049             FieldSpec::optional("file_path", "string"),
   1050             FieldSpec::optional("mime_type", "string"),
   1051             FieldSpec::optional("res_base", "string"),
   1052             FieldSpec::optional("res_path", "string"),
   1053             FieldSpec::optional("label", "string"),
   1054             FieldSpec::optional("description", "string"),
   1055         ],
   1056     },
   1057     TypeSpec::Object {
   1058         name: "IMediaImageFieldsPartial",
   1059         fields: &[
   1060             FieldSpec::optional_nullable("file_path", "ReplicaDbJsonValue"),
   1061             FieldSpec::optional_nullable("mime_type", "ReplicaDbJsonValue"),
   1062             FieldSpec::optional_nullable("res_base", "ReplicaDbJsonValue"),
   1063             FieldSpec::optional_nullable("res_path", "ReplicaDbJsonValue"),
   1064             FieldSpec::optional_nullable("label", "ReplicaDbJsonValue"),
   1065             FieldSpec::optional_nullable("description", "ReplicaDbJsonValue"),
   1066         ],
   1067     },
   1068     TypeSpec::Union {
   1069         name: "IMediaImageFindMany",
   1070         variants: &[
   1071             VariantSpec::Object(&[FieldSpec::nullable("filter", "IMediaImageFieldsFilter")]),
   1072             VariantSpec::Object(&[FieldSpec::required("rel", "MediaImageFindManyRel")]),
   1073         ],
   1074     },
   1075     TypeSpec::Alias {
   1076         name: "IMediaImageFindManyResolve",
   1077         target: "IResultList<MediaImage>",
   1078     },
   1079     TypeSpec::Union {
   1080         name: "IMediaImageFindOne",
   1081         variants: &[
   1082             VariantSpec::Ref("IMediaImageFindOneArgs"),
   1083             VariantSpec::Ref("IMediaImageFindOneRelArgs"),
   1084         ],
   1085     },
   1086     TypeSpec::Object {
   1087         name: "IMediaImageFindOneArgs",
   1088         fields: &[FieldSpec::required("on", "MediaImageQueryBindValues")],
   1089     },
   1090     TypeSpec::Object {
   1091         name: "IMediaImageFindOneRelArgs",
   1092         fields: &[FieldSpec::required("rel", "MediaImageFindManyRel")],
   1093     },
   1094     TypeSpec::Alias {
   1095         name: "IMediaImageFindOneResolve",
   1096         target: "IResult<MediaImage | null>",
   1097     },
   1098     TypeSpec::Alias {
   1099         name: "IMediaImageUpdate",
   1100         target: "IMediaImageUpdateArgs",
   1101     },
   1102     TypeSpec::Object {
   1103         name: "IMediaImageUpdateArgs",
   1104         fields: &[
   1105             FieldSpec::required("on", "MediaImageQueryBindValues"),
   1106             FieldSpec::required("fields", "IMediaImageFieldsPartial"),
   1107         ],
   1108     },
   1109     TypeSpec::Alias {
   1110         name: "IMediaImageUpdateResolve",
   1111         target: "IResult<MediaImage>",
   1112     },
   1113     TypeSpec::Alias {
   1114         name: "INostrEventHeadCreate",
   1115         target: "INostrEventHeadFields",
   1116     },
   1117     TypeSpec::Alias {
   1118         name: "INostrEventHeadCreateResolve",
   1119         target: "IResult<NostrEventHead>",
   1120     },
   1121     TypeSpec::Alias {
   1122         name: "INostrEventHeadDelete",
   1123         target: "INostrEventHeadFindOne",
   1124     },
   1125     TypeSpec::Alias {
   1126         name: "INostrEventHeadDeleteResolve",
   1127         target: "IResult<string>",
   1128     },
   1129     TypeSpec::Object {
   1130         name: "INostrEventHeadFields",
   1131         fields: &[
   1132             FieldSpec::required("key", "string"),
   1133             FieldSpec::required("kind", "number"),
   1134             FieldSpec::required("pubkey", "string"),
   1135             FieldSpec::required("d_tag", "string"),
   1136             FieldSpec::required("last_event_id", "string"),
   1137             FieldSpec::required("last_created_at", "number"),
   1138             FieldSpec::required("content_hash", "string"),
   1139         ],
   1140     },
   1141     TypeSpec::Object {
   1142         name: "INostrEventHeadFieldsFilter",
   1143         fields: &[
   1144             FieldSpec::optional("id", "string"),
   1145             FieldSpec::optional("created_at", "string"),
   1146             FieldSpec::optional("updated_at", "string"),
   1147             FieldSpec::optional("key", "string"),
   1148             FieldSpec::optional("kind", "number"),
   1149             FieldSpec::optional("pubkey", "string"),
   1150             FieldSpec::optional("d_tag", "string"),
   1151             FieldSpec::optional("last_event_id", "string"),
   1152             FieldSpec::optional("last_created_at", "number"),
   1153             FieldSpec::optional("content_hash", "string"),
   1154         ],
   1155     },
   1156     TypeSpec::Object {
   1157         name: "INostrEventHeadFieldsPartial",
   1158         fields: &[
   1159             FieldSpec::optional_nullable("key", "ReplicaDbJsonValue"),
   1160             FieldSpec::optional_nullable("kind", "ReplicaDbJsonValue"),
   1161             FieldSpec::optional_nullable("pubkey", "ReplicaDbJsonValue"),
   1162             FieldSpec::optional_nullable("d_tag", "ReplicaDbJsonValue"),
   1163             FieldSpec::optional_nullable("last_event_id", "ReplicaDbJsonValue"),
   1164             FieldSpec::optional_nullable("last_created_at", "ReplicaDbJsonValue"),
   1165             FieldSpec::optional_nullable("content_hash", "ReplicaDbJsonValue"),
   1166         ],
   1167     },
   1168     TypeSpec::Alias {
   1169         name: "INostrEventHeadFindMany",
   1170         target: "INostrEventHeadFindManyArgs",
   1171     },
   1172     TypeSpec::Object {
   1173         name: "INostrEventHeadFindManyArgs",
   1174         fields: &[FieldSpec::nullable("filter", "INostrEventHeadFieldsFilter")],
   1175     },
   1176     TypeSpec::Alias {
   1177         name: "INostrEventHeadFindManyResolve",
   1178         target: "IResultList<NostrEventHead>",
   1179     },
   1180     TypeSpec::Union {
   1181         name: "INostrEventHeadFindOne",
   1182         variants: &[VariantSpec::Ref("INostrEventHeadFindOneArgs")],
   1183     },
   1184     TypeSpec::Object {
   1185         name: "INostrEventHeadFindOneArgs",
   1186         fields: &[FieldSpec::required("on", "NostrEventHeadQueryBindValues")],
   1187     },
   1188     TypeSpec::Alias {
   1189         name: "INostrEventHeadFindOneResolve",
   1190         target: "IResult<NostrEventHead | null>",
   1191     },
   1192     TypeSpec::Alias {
   1193         name: "INostrEventHeadUpdate",
   1194         target: "INostrEventHeadUpdateArgs",
   1195     },
   1196     TypeSpec::Object {
   1197         name: "INostrEventHeadUpdateArgs",
   1198         fields: &[
   1199             FieldSpec::required("on", "NostrEventHeadQueryBindValues"),
   1200             FieldSpec::required("fields", "INostrEventHeadFieldsPartial"),
   1201         ],
   1202     },
   1203     TypeSpec::Alias {
   1204         name: "INostrEventHeadUpdateResolve",
   1205         target: "IResult<NostrEventHead>",
   1206     },
   1207     TypeSpec::Alias {
   1208         name: "INostrProfileCreate",
   1209         target: "INostrProfileFields",
   1210     },
   1211     TypeSpec::Alias {
   1212         name: "INostrProfileCreateResolve",
   1213         target: "IResult<NostrProfile>",
   1214     },
   1215     TypeSpec::Alias {
   1216         name: "INostrProfileDelete",
   1217         target: "INostrProfileFindOne",
   1218     },
   1219     TypeSpec::Alias {
   1220         name: "INostrProfileDeleteResolve",
   1221         target: "IResult<string>",
   1222     },
   1223     TypeSpec::Object {
   1224         name: "INostrProfileFields",
   1225         fields: &[
   1226             FieldSpec::required("public_key", "string"),
   1227             FieldSpec::required("profile_type", "string"),
   1228             FieldSpec::required("name", "string"),
   1229             FieldSpec::optional_nullable("display_name", "string"),
   1230             FieldSpec::optional_nullable("about", "string"),
   1231             FieldSpec::optional_nullable("website", "string"),
   1232             FieldSpec::optional_nullable("picture", "string"),
   1233             FieldSpec::optional_nullable("banner", "string"),
   1234             FieldSpec::optional_nullable("nip05", "string"),
   1235             FieldSpec::optional_nullable("lud06", "string"),
   1236             FieldSpec::optional_nullable("lud16", "string"),
   1237         ],
   1238     },
   1239     TypeSpec::Object {
   1240         name: "INostrProfileFieldsFilter",
   1241         fields: &[
   1242             FieldSpec::optional("id", "string"),
   1243             FieldSpec::optional("created_at", "string"),
   1244             FieldSpec::optional("updated_at", "string"),
   1245             FieldSpec::optional("public_key", "string"),
   1246             FieldSpec::optional("profile_type", "string"),
   1247             FieldSpec::optional("name", "string"),
   1248             FieldSpec::optional("display_name", "string"),
   1249             FieldSpec::optional("about", "string"),
   1250             FieldSpec::optional("website", "string"),
   1251             FieldSpec::optional("picture", "string"),
   1252             FieldSpec::optional("banner", "string"),
   1253             FieldSpec::optional("nip05", "string"),
   1254             FieldSpec::optional("lud06", "string"),
   1255             FieldSpec::optional("lud16", "string"),
   1256         ],
   1257     },
   1258     TypeSpec::Object {
   1259         name: "INostrProfileFieldsPartial",
   1260         fields: &[
   1261             FieldSpec::optional_nullable("public_key", "ReplicaDbJsonValue"),
   1262             FieldSpec::optional_nullable("profile_type", "ReplicaDbJsonValue"),
   1263             FieldSpec::optional_nullable("name", "ReplicaDbJsonValue"),
   1264             FieldSpec::optional_nullable("display_name", "ReplicaDbJsonValue"),
   1265             FieldSpec::optional_nullable("about", "ReplicaDbJsonValue"),
   1266             FieldSpec::optional_nullable("website", "ReplicaDbJsonValue"),
   1267             FieldSpec::optional_nullable("picture", "ReplicaDbJsonValue"),
   1268             FieldSpec::optional_nullable("banner", "ReplicaDbJsonValue"),
   1269             FieldSpec::optional_nullable("nip05", "ReplicaDbJsonValue"),
   1270             FieldSpec::optional_nullable("lud06", "ReplicaDbJsonValue"),
   1271             FieldSpec::optional_nullable("lud16", "ReplicaDbJsonValue"),
   1272         ],
   1273     },
   1274     TypeSpec::Union {
   1275         name: "INostrProfileFindMany",
   1276         variants: &[
   1277             VariantSpec::Object(&[FieldSpec::nullable("filter", "INostrProfileFieldsFilter")]),
   1278             VariantSpec::Object(&[FieldSpec::required("rel", "NostrProfileFindManyRel")]),
   1279         ],
   1280     },
   1281     TypeSpec::Alias {
   1282         name: "INostrProfileFindManyResolve",
   1283         target: "IResultList<NostrProfile>",
   1284     },
   1285     TypeSpec::Union {
   1286         name: "INostrProfileFindOne",
   1287         variants: &[
   1288             VariantSpec::Ref("INostrProfileFindOneArgs"),
   1289             VariantSpec::Ref("INostrProfileFindOneRelArgs"),
   1290         ],
   1291     },
   1292     TypeSpec::Object {
   1293         name: "INostrProfileFindOneArgs",
   1294         fields: &[FieldSpec::required("on", "NostrProfileQueryBindValues")],
   1295     },
   1296     TypeSpec::Object {
   1297         name: "INostrProfileFindOneRelArgs",
   1298         fields: &[FieldSpec::required("rel", "NostrProfileFindManyRel")],
   1299     },
   1300     TypeSpec::Alias {
   1301         name: "INostrProfileFindOneResolve",
   1302         target: "IResult<NostrProfile | null>",
   1303     },
   1304     TypeSpec::Object {
   1305         name: "INostrProfileRelayRelation",
   1306         fields: &[
   1307             FieldSpec::required("nostr_profile", "NostrProfileQueryBindValues"),
   1308             FieldSpec::required("nostr_relay", "NostrRelayQueryBindValues"),
   1309         ],
   1310     },
   1311     TypeSpec::Alias {
   1312         name: "INostrProfileRelayResolve",
   1313         target: "IResultPass",
   1314     },
   1315     TypeSpec::Alias {
   1316         name: "INostrProfileUpdate",
   1317         target: "INostrProfileUpdateArgs",
   1318     },
   1319     TypeSpec::Object {
   1320         name: "INostrProfileUpdateArgs",
   1321         fields: &[
   1322             FieldSpec::required("on", "NostrProfileQueryBindValues"),
   1323             FieldSpec::required("fields", "INostrProfileFieldsPartial"),
   1324         ],
   1325     },
   1326     TypeSpec::Alias {
   1327         name: "INostrProfileUpdateResolve",
   1328         target: "IResult<NostrProfile>",
   1329     },
   1330     TypeSpec::Alias {
   1331         name: "INostrRelayCreate",
   1332         target: "INostrRelayFields",
   1333     },
   1334     TypeSpec::Alias {
   1335         name: "INostrRelayCreateResolve",
   1336         target: "IResult<NostrRelay>",
   1337     },
   1338     TypeSpec::Alias {
   1339         name: "INostrRelayDelete",
   1340         target: "INostrRelayFindOne",
   1341     },
   1342     TypeSpec::Alias {
   1343         name: "INostrRelayDeleteResolve",
   1344         target: "IResult<string>",
   1345     },
   1346     TypeSpec::Object {
   1347         name: "INostrRelayFields",
   1348         fields: &[
   1349             FieldSpec::required("url", "string"),
   1350             FieldSpec::optional_nullable("relay_id", "string"),
   1351             FieldSpec::optional_nullable("name", "string"),
   1352             FieldSpec::optional_nullable("description", "string"),
   1353             FieldSpec::optional_nullable("pubkey", "string"),
   1354             FieldSpec::optional_nullable("contact", "string"),
   1355             FieldSpec::optional_nullable("supported_nips", "string"),
   1356             FieldSpec::optional_nullable("software", "string"),
   1357             FieldSpec::optional_nullable("version", "string"),
   1358             FieldSpec::optional_nullable("data", "string"),
   1359         ],
   1360     },
   1361     TypeSpec::Object {
   1362         name: "INostrRelayFieldsFilter",
   1363         fields: &[
   1364             FieldSpec::optional("id", "string"),
   1365             FieldSpec::optional("created_at", "string"),
   1366             FieldSpec::optional("updated_at", "string"),
   1367             FieldSpec::optional("url", "string"),
   1368             FieldSpec::optional("relay_id", "string"),
   1369             FieldSpec::optional("name", "string"),
   1370             FieldSpec::optional("description", "string"),
   1371             FieldSpec::optional("pubkey", "string"),
   1372             FieldSpec::optional("contact", "string"),
   1373             FieldSpec::optional("supported_nips", "string"),
   1374             FieldSpec::optional("software", "string"),
   1375             FieldSpec::optional("version", "string"),
   1376             FieldSpec::optional("data", "string"),
   1377         ],
   1378     },
   1379     TypeSpec::Object {
   1380         name: "INostrRelayFieldsPartial",
   1381         fields: &[
   1382             FieldSpec::optional_nullable("url", "ReplicaDbJsonValue"),
   1383             FieldSpec::optional_nullable("relay_id", "ReplicaDbJsonValue"),
   1384             FieldSpec::optional_nullable("name", "ReplicaDbJsonValue"),
   1385             FieldSpec::optional_nullable("description", "ReplicaDbJsonValue"),
   1386             FieldSpec::optional_nullable("pubkey", "ReplicaDbJsonValue"),
   1387             FieldSpec::optional_nullable("contact", "ReplicaDbJsonValue"),
   1388             FieldSpec::optional_nullable("supported_nips", "ReplicaDbJsonValue"),
   1389             FieldSpec::optional_nullable("software", "ReplicaDbJsonValue"),
   1390             FieldSpec::optional_nullable("version", "ReplicaDbJsonValue"),
   1391             FieldSpec::optional_nullable("data", "ReplicaDbJsonValue"),
   1392         ],
   1393     },
   1394     TypeSpec::Union {
   1395         name: "INostrRelayFindMany",
   1396         variants: &[
   1397             VariantSpec::Object(&[FieldSpec::nullable("filter", "INostrRelayFieldsFilter")]),
   1398             VariantSpec::Object(&[FieldSpec::required("rel", "NostrRelayFindManyRel")]),
   1399         ],
   1400     },
   1401     TypeSpec::Alias {
   1402         name: "INostrRelayFindManyResolve",
   1403         target: "IResultList<NostrRelay>",
   1404     },
   1405     TypeSpec::Union {
   1406         name: "INostrRelayFindOne",
   1407         variants: &[
   1408             VariantSpec::Ref("INostrRelayFindOneArgs"),
   1409             VariantSpec::Ref("INostrRelayFindOneRelArgs"),
   1410         ],
   1411     },
   1412     TypeSpec::Object {
   1413         name: "INostrRelayFindOneArgs",
   1414         fields: &[FieldSpec::required("on", "NostrRelayQueryBindValues")],
   1415     },
   1416     TypeSpec::Object {
   1417         name: "INostrRelayFindOneRelArgs",
   1418         fields: &[FieldSpec::required("rel", "NostrRelayFindManyRel")],
   1419     },
   1420     TypeSpec::Alias {
   1421         name: "INostrRelayFindOneResolve",
   1422         target: "IResult<NostrRelay | null>",
   1423     },
   1424     TypeSpec::Alias {
   1425         name: "INostrRelayUpdate",
   1426         target: "INostrRelayUpdateArgs",
   1427     },
   1428     TypeSpec::Object {
   1429         name: "INostrRelayUpdateArgs",
   1430         fields: &[
   1431             FieldSpec::required("on", "NostrRelayQueryBindValues"),
   1432             FieldSpec::required("fields", "INostrRelayFieldsPartial"),
   1433         ],
   1434     },
   1435     TypeSpec::Alias {
   1436         name: "INostrRelayUpdateResolve",
   1437         target: "IResult<NostrRelay>",
   1438     },
   1439     TypeSpec::Alias {
   1440         name: "IPlotCreate",
   1441         target: "IPlotFields",
   1442     },
   1443     TypeSpec::Alias {
   1444         name: "IPlotCreateResolve",
   1445         target: "IResult<Plot>",
   1446     },
   1447     TypeSpec::Alias {
   1448         name: "IPlotDelete",
   1449         target: "IPlotFindOne",
   1450     },
   1451     TypeSpec::Alias {
   1452         name: "IPlotDeleteResolve",
   1453         target: "IResult<string>",
   1454     },
   1455     TypeSpec::Object {
   1456         name: "IPlotFields",
   1457         fields: &[
   1458             FieldSpec::required("d_tag", "string"),
   1459             FieldSpec::required("farm_id", "string"),
   1460             FieldSpec::required("name", "string"),
   1461             FieldSpec::optional_nullable("about", "string"),
   1462             FieldSpec::optional_nullable("location_primary", "string"),
   1463             FieldSpec::optional_nullable("location_city", "string"),
   1464             FieldSpec::optional_nullable("location_region", "string"),
   1465             FieldSpec::optional_nullable("location_country", "string"),
   1466         ],
   1467     },
   1468     TypeSpec::Object {
   1469         name: "IPlotFieldsFilter",
   1470         fields: &[
   1471             FieldSpec::optional("id", "string"),
   1472             FieldSpec::optional("created_at", "string"),
   1473             FieldSpec::optional("updated_at", "string"),
   1474             FieldSpec::optional("d_tag", "string"),
   1475             FieldSpec::optional("farm_id", "string"),
   1476             FieldSpec::optional("name", "string"),
   1477             FieldSpec::optional("about", "string"),
   1478             FieldSpec::optional("location_primary", "string"),
   1479             FieldSpec::optional("location_city", "string"),
   1480             FieldSpec::optional("location_region", "string"),
   1481             FieldSpec::optional("location_country", "string"),
   1482         ],
   1483     },
   1484     TypeSpec::Object {
   1485         name: "IPlotFieldsPartial",
   1486         fields: &[
   1487             FieldSpec::optional_nullable("d_tag", "ReplicaDbJsonValue"),
   1488             FieldSpec::optional_nullable("farm_id", "ReplicaDbJsonValue"),
   1489             FieldSpec::optional_nullable("name", "ReplicaDbJsonValue"),
   1490             FieldSpec::optional_nullable("about", "ReplicaDbJsonValue"),
   1491             FieldSpec::optional_nullable("location_primary", "ReplicaDbJsonValue"),
   1492             FieldSpec::optional_nullable("location_city", "ReplicaDbJsonValue"),
   1493             FieldSpec::optional_nullable("location_region", "ReplicaDbJsonValue"),
   1494             FieldSpec::optional_nullable("location_country", "ReplicaDbJsonValue"),
   1495         ],
   1496     },
   1497     TypeSpec::Alias {
   1498         name: "IPlotFindMany",
   1499         target: "IPlotFindManyArgs",
   1500     },
   1501     TypeSpec::Object {
   1502         name: "IPlotFindManyArgs",
   1503         fields: &[FieldSpec::nullable("filter", "IPlotFieldsFilter")],
   1504     },
   1505     TypeSpec::Alias {
   1506         name: "IPlotFindManyResolve",
   1507         target: "IResultList<Plot>",
   1508     },
   1509     TypeSpec::Union {
   1510         name: "IPlotFindOne",
   1511         variants: &[VariantSpec::Ref("IPlotFindOneArgs")],
   1512     },
   1513     TypeSpec::Object {
   1514         name: "IPlotFindOneArgs",
   1515         fields: &[FieldSpec::required("on", "PlotQueryBindValues")],
   1516     },
   1517     TypeSpec::Alias {
   1518         name: "IPlotFindOneResolve",
   1519         target: "IResult<Plot | null>",
   1520     },
   1521     TypeSpec::Alias {
   1522         name: "IPlotGcsLocationCreate",
   1523         target: "IPlotGcsLocationFields",
   1524     },
   1525     TypeSpec::Alias {
   1526         name: "IPlotGcsLocationCreateResolve",
   1527         target: "IResult<PlotGcsLocation>",
   1528     },
   1529     TypeSpec::Alias {
   1530         name: "IPlotGcsLocationDelete",
   1531         target: "IPlotGcsLocationFindOne",
   1532     },
   1533     TypeSpec::Alias {
   1534         name: "IPlotGcsLocationDeleteResolve",
   1535         target: "IResult<string>",
   1536     },
   1537     TypeSpec::Object {
   1538         name: "IPlotGcsLocationFields",
   1539         fields: &[
   1540             FieldSpec::required("plot_id", "string"),
   1541             FieldSpec::required("gcs_location_id", "string"),
   1542             FieldSpec::required("role", "string"),
   1543         ],
   1544     },
   1545     TypeSpec::Object {
   1546         name: "IPlotGcsLocationFieldsFilter",
   1547         fields: &[
   1548             FieldSpec::optional("id", "string"),
   1549             FieldSpec::optional("created_at", "string"),
   1550             FieldSpec::optional("updated_at", "string"),
   1551             FieldSpec::optional("plot_id", "string"),
   1552             FieldSpec::optional("gcs_location_id", "string"),
   1553             FieldSpec::optional("role", "string"),
   1554         ],
   1555     },
   1556     TypeSpec::Object {
   1557         name: "IPlotGcsLocationFieldsPartial",
   1558         fields: &[
   1559             FieldSpec::optional_nullable("plot_id", "ReplicaDbJsonValue"),
   1560             FieldSpec::optional_nullable("gcs_location_id", "ReplicaDbJsonValue"),
   1561             FieldSpec::optional_nullable("role", "ReplicaDbJsonValue"),
   1562         ],
   1563     },
   1564     TypeSpec::Alias {
   1565         name: "IPlotGcsLocationFindMany",
   1566         target: "IPlotGcsLocationFindManyArgs",
   1567     },
   1568     TypeSpec::Object {
   1569         name: "IPlotGcsLocationFindManyArgs",
   1570         fields: &[FieldSpec::nullable(
   1571             "filter",
   1572             "IPlotGcsLocationFieldsFilter",
   1573         )],
   1574     },
   1575     TypeSpec::Alias {
   1576         name: "IPlotGcsLocationFindManyResolve",
   1577         target: "IResultList<PlotGcsLocation>",
   1578     },
   1579     TypeSpec::Union {
   1580         name: "IPlotGcsLocationFindOne",
   1581         variants: &[VariantSpec::Ref("IPlotGcsLocationFindOneArgs")],
   1582     },
   1583     TypeSpec::Object {
   1584         name: "IPlotGcsLocationFindOneArgs",
   1585         fields: &[FieldSpec::required("on", "PlotGcsLocationQueryBindValues")],
   1586     },
   1587     TypeSpec::Alias {
   1588         name: "IPlotGcsLocationFindOneResolve",
   1589         target: "IResult<PlotGcsLocation | null>",
   1590     },
   1591     TypeSpec::Alias {
   1592         name: "IPlotGcsLocationUpdate",
   1593         target: "IPlotGcsLocationUpdateArgs",
   1594     },
   1595     TypeSpec::Object {
   1596         name: "IPlotGcsLocationUpdateArgs",
   1597         fields: &[
   1598             FieldSpec::required("on", "PlotGcsLocationQueryBindValues"),
   1599             FieldSpec::required("fields", "IPlotGcsLocationFieldsPartial"),
   1600         ],
   1601     },
   1602     TypeSpec::Alias {
   1603         name: "IPlotGcsLocationUpdateResolve",
   1604         target: "IResult<PlotGcsLocation>",
   1605     },
   1606     TypeSpec::Alias {
   1607         name: "IPlotTagCreate",
   1608         target: "IPlotTagFields",
   1609     },
   1610     TypeSpec::Alias {
   1611         name: "IPlotTagCreateResolve",
   1612         target: "IResult<PlotTag>",
   1613     },
   1614     TypeSpec::Alias {
   1615         name: "IPlotTagDelete",
   1616         target: "IPlotTagFindOne",
   1617     },
   1618     TypeSpec::Alias {
   1619         name: "IPlotTagDeleteResolve",
   1620         target: "IResult<string>",
   1621     },
   1622     TypeSpec::Object {
   1623         name: "IPlotTagFields",
   1624         fields: &[
   1625             FieldSpec::required("plot_id", "string"),
   1626             FieldSpec::required("tag", "string"),
   1627         ],
   1628     },
   1629     TypeSpec::Object {
   1630         name: "IPlotTagFieldsFilter",
   1631         fields: &[
   1632             FieldSpec::optional("id", "string"),
   1633             FieldSpec::optional("created_at", "string"),
   1634             FieldSpec::optional("updated_at", "string"),
   1635             FieldSpec::optional("plot_id", "string"),
   1636             FieldSpec::optional("tag", "string"),
   1637         ],
   1638     },
   1639     TypeSpec::Object {
   1640         name: "IPlotTagFieldsPartial",
   1641         fields: &[
   1642             FieldSpec::optional_nullable("plot_id", "ReplicaDbJsonValue"),
   1643             FieldSpec::optional_nullable("tag", "ReplicaDbJsonValue"),
   1644         ],
   1645     },
   1646     TypeSpec::Alias {
   1647         name: "IPlotTagFindMany",
   1648         target: "IPlotTagFindManyArgs",
   1649     },
   1650     TypeSpec::Object {
   1651         name: "IPlotTagFindManyArgs",
   1652         fields: &[FieldSpec::nullable("filter", "IPlotTagFieldsFilter")],
   1653     },
   1654     TypeSpec::Alias {
   1655         name: "IPlotTagFindManyResolve",
   1656         target: "IResultList<PlotTag>",
   1657     },
   1658     TypeSpec::Union {
   1659         name: "IPlotTagFindOne",
   1660         variants: &[VariantSpec::Ref("IPlotTagFindOneArgs")],
   1661     },
   1662     TypeSpec::Object {
   1663         name: "IPlotTagFindOneArgs",
   1664         fields: &[FieldSpec::required("on", "PlotTagQueryBindValues")],
   1665     },
   1666     TypeSpec::Alias {
   1667         name: "IPlotTagFindOneResolve",
   1668         target: "IResult<PlotTag | null>",
   1669     },
   1670     TypeSpec::Alias {
   1671         name: "IPlotTagUpdate",
   1672         target: "IPlotTagUpdateArgs",
   1673     },
   1674     TypeSpec::Object {
   1675         name: "IPlotTagUpdateArgs",
   1676         fields: &[
   1677             FieldSpec::required("on", "PlotTagQueryBindValues"),
   1678             FieldSpec::required("fields", "IPlotTagFieldsPartial"),
   1679         ],
   1680     },
   1681     TypeSpec::Alias {
   1682         name: "IPlotTagUpdateResolve",
   1683         target: "IResult<PlotTag>",
   1684     },
   1685     TypeSpec::Alias {
   1686         name: "IPlotUpdate",
   1687         target: "IPlotUpdateArgs",
   1688     },
   1689     TypeSpec::Object {
   1690         name: "IPlotUpdateArgs",
   1691         fields: &[
   1692             FieldSpec::required("on", "PlotQueryBindValues"),
   1693             FieldSpec::required("fields", "IPlotFieldsPartial"),
   1694         ],
   1695     },
   1696     TypeSpec::Alias {
   1697         name: "IPlotUpdateResolve",
   1698         target: "IResult<Plot>",
   1699     },
   1700     TypeSpec::Alias {
   1701         name: "ITradeProductCreate",
   1702         target: "ITradeProductFields",
   1703     },
   1704     TypeSpec::Alias {
   1705         name: "ITradeProductCreateResolve",
   1706         target: "IResult<TradeProduct>",
   1707     },
   1708     TypeSpec::Alias {
   1709         name: "ITradeProductDelete",
   1710         target: "ITradeProductFindOne",
   1711     },
   1712     TypeSpec::Alias {
   1713         name: "ITradeProductDeleteResolve",
   1714         target: "IResult<string>",
   1715     },
   1716     TypeSpec::Object {
   1717         name: "ITradeProductFields",
   1718         fields: &[
   1719             FieldSpec::required("key", "string"),
   1720             FieldSpec::required("category", "string"),
   1721             FieldSpec::required("title", "string"),
   1722             FieldSpec::required("summary", "string"),
   1723             FieldSpec::required("process", "string"),
   1724             FieldSpec::required("lot", "string"),
   1725             FieldSpec::required("profile", "string"),
   1726             FieldSpec::required("year", "bigint"),
   1727             FieldSpec::required("qty_amt", "number"),
   1728             FieldSpec::required("qty_amt_exact", "string"),
   1729             FieldSpec::required("qty_unit", "string"),
   1730             FieldSpec::optional_nullable("qty_label", "string"),
   1731             FieldSpec::optional_nullable("qty_avail", "bigint"),
   1732             FieldSpec::required("price_amt", "number"),
   1733             FieldSpec::required("price_amt_exact", "string"),
   1734             FieldSpec::required("price_currency", "string"),
   1735             FieldSpec::required("price_qty_amt", "number"),
   1736             FieldSpec::required("price_qty_amt_exact", "string"),
   1737             FieldSpec::required("price_qty_unit", "string"),
   1738             FieldSpec::optional_nullable("listing_addr", "string"),
   1739             FieldSpec::optional_nullable("primary_bin_id", "string"),
   1740             FieldSpec::optional_nullable("verified_primary_bin_id", "string"),
   1741             FieldSpec::optional_nullable("notes", "string"),
   1742         ],
   1743     },
   1744     TypeSpec::Object {
   1745         name: "ITradeProductFieldsFilter",
   1746         fields: &[
   1747             FieldSpec::optional("id", "string"),
   1748             FieldSpec::optional("created_at", "string"),
   1749             FieldSpec::optional("updated_at", "string"),
   1750             FieldSpec::optional("key", "string"),
   1751             FieldSpec::optional("category", "string"),
   1752             FieldSpec::optional("title", "string"),
   1753             FieldSpec::optional("summary", "string"),
   1754             FieldSpec::optional("process", "string"),
   1755             FieldSpec::optional("lot", "string"),
   1756             FieldSpec::optional("profile", "string"),
   1757             FieldSpec::optional("year", "bigint"),
   1758             FieldSpec::optional("qty_amt", "number"),
   1759             FieldSpec::optional("qty_amt_exact", "string"),
   1760             FieldSpec::optional("qty_unit", "string"),
   1761             FieldSpec::optional("qty_label", "string"),
   1762             FieldSpec::optional("qty_avail", "bigint"),
   1763             FieldSpec::optional("price_amt", "number"),
   1764             FieldSpec::optional("price_amt_exact", "string"),
   1765             FieldSpec::optional("price_currency", "string"),
   1766             FieldSpec::optional("price_qty_amt", "number"),
   1767             FieldSpec::optional("price_qty_amt_exact", "string"),
   1768             FieldSpec::optional("price_qty_unit", "string"),
   1769             FieldSpec::optional("listing_addr", "string"),
   1770             FieldSpec::optional("primary_bin_id", "string"),
   1771             FieldSpec::optional("verified_primary_bin_id", "string"),
   1772             FieldSpec::optional("notes", "string"),
   1773         ],
   1774     },
   1775     TypeSpec::Object {
   1776         name: "ITradeProductFieldsPartial",
   1777         fields: &[
   1778             FieldSpec::optional_nullable("key", "ReplicaDbJsonValue"),
   1779             FieldSpec::optional_nullable("category", "ReplicaDbJsonValue"),
   1780             FieldSpec::optional_nullable("title", "ReplicaDbJsonValue"),
   1781             FieldSpec::optional_nullable("summary", "ReplicaDbJsonValue"),
   1782             FieldSpec::optional_nullable("process", "ReplicaDbJsonValue"),
   1783             FieldSpec::optional_nullable("lot", "ReplicaDbJsonValue"),
   1784             FieldSpec::optional_nullable("profile", "ReplicaDbJsonValue"),
   1785             FieldSpec::optional_nullable("year", "ReplicaDbJsonValue"),
   1786             FieldSpec::optional_nullable("qty_amt", "ReplicaDbJsonValue"),
   1787             FieldSpec::optional_nullable("qty_amt_exact", "ReplicaDbJsonValue"),
   1788             FieldSpec::optional_nullable("qty_unit", "ReplicaDbJsonValue"),
   1789             FieldSpec::optional_nullable("qty_label", "ReplicaDbJsonValue"),
   1790             FieldSpec::optional_nullable("qty_avail", "ReplicaDbJsonValue"),
   1791             FieldSpec::optional_nullable("price_amt", "ReplicaDbJsonValue"),
   1792             FieldSpec::optional_nullable("price_amt_exact", "ReplicaDbJsonValue"),
   1793             FieldSpec::optional_nullable("price_currency", "ReplicaDbJsonValue"),
   1794             FieldSpec::optional_nullable("price_qty_amt", "ReplicaDbJsonValue"),
   1795             FieldSpec::optional_nullable("price_qty_amt_exact", "ReplicaDbJsonValue"),
   1796             FieldSpec::optional_nullable("price_qty_unit", "ReplicaDbJsonValue"),
   1797             FieldSpec::optional_nullable("listing_addr", "ReplicaDbJsonValue"),
   1798             FieldSpec::optional_nullable("primary_bin_id", "ReplicaDbJsonValue"),
   1799             FieldSpec::optional_nullable("verified_primary_bin_id", "ReplicaDbJsonValue"),
   1800             FieldSpec::optional_nullable("notes", "ReplicaDbJsonValue"),
   1801         ],
   1802     },
   1803     TypeSpec::Alias {
   1804         name: "ITradeProductFindMany",
   1805         target: "ITradeProductFindManyArgs",
   1806     },
   1807     TypeSpec::Object {
   1808         name: "ITradeProductFindManyArgs",
   1809         fields: &[FieldSpec::nullable("filter", "ITradeProductFieldsFilter")],
   1810     },
   1811     TypeSpec::Alias {
   1812         name: "ITradeProductFindManyResolve",
   1813         target: "IResultList<TradeProduct>",
   1814     },
   1815     TypeSpec::Union {
   1816         name: "ITradeProductFindOne",
   1817         variants: &[VariantSpec::Ref("ITradeProductFindOneArgs")],
   1818     },
   1819     TypeSpec::Object {
   1820         name: "ITradeProductFindOneArgs",
   1821         fields: &[FieldSpec::required("on", "TradeProductQueryBindValues")],
   1822     },
   1823     TypeSpec::Alias {
   1824         name: "ITradeProductFindOneResolve",
   1825         target: "IResult<TradeProduct | null>",
   1826     },
   1827     TypeSpec::Object {
   1828         name: "ITradeProductLocationRelation",
   1829         fields: &[
   1830             FieldSpec::required("trade_product", "TradeProductQueryBindValues"),
   1831             FieldSpec::required("gcs_location", "GcsLocationQueryBindValues"),
   1832         ],
   1833     },
   1834     TypeSpec::Alias {
   1835         name: "ITradeProductLocationResolve",
   1836         target: "IResultPass",
   1837     },
   1838     TypeSpec::Object {
   1839         name: "ITradeProductMediaRelation",
   1840         fields: &[
   1841             FieldSpec::required("trade_product", "TradeProductQueryBindValues"),
   1842             FieldSpec::required("media_image", "MediaImageQueryBindValues"),
   1843         ],
   1844     },
   1845     TypeSpec::Alias {
   1846         name: "ITradeProductMediaResolve",
   1847         target: "IResultPass",
   1848     },
   1849     TypeSpec::Alias {
   1850         name: "ITradeProductUpdate",
   1851         target: "ITradeProductUpdateArgs",
   1852     },
   1853     TypeSpec::Object {
   1854         name: "ITradeProductUpdateArgs",
   1855         fields: &[
   1856             FieldSpec::required("on", "TradeProductQueryBindValues"),
   1857             FieldSpec::required("fields", "ITradeProductFieldsPartial"),
   1858         ],
   1859     },
   1860     TypeSpec::Alias {
   1861         name: "ITradeProductUpdateResolve",
   1862         target: "IResult<TradeProduct>",
   1863     },
   1864     TypeSpec::Object {
   1865         name: "LogError",
   1866         fields: &[
   1867             FieldSpec::required("id", "string"),
   1868             FieldSpec::required("created_at", "string"),
   1869             FieldSpec::required("updated_at", "string"),
   1870             FieldSpec::required("error", "string"),
   1871             FieldSpec::required("message", "string"),
   1872             FieldSpec::nullable("stack_trace", "string"),
   1873             FieldSpec::nullable("cause", "string"),
   1874             FieldSpec::required("app_system", "string"),
   1875             FieldSpec::required("app_version", "string"),
   1876             FieldSpec::required("nostr_pubkey", "string"),
   1877             FieldSpec::nullable("data", "string"),
   1878         ],
   1879     },
   1880     TypeSpec::Union {
   1881         name: "LogErrorQueryBindValues",
   1882         variants: &[
   1883             VariantSpec::Object(&[FieldSpec::required("id", "string")]),
   1884             VariantSpec::Object(&[FieldSpec::required("nostr_pubkey", "string")]),
   1885         ],
   1886     },
   1887     TypeSpec::Object {
   1888         name: "MediaImage",
   1889         fields: &[
   1890             FieldSpec::required("id", "string"),
   1891             FieldSpec::required("created_at", "string"),
   1892             FieldSpec::required("updated_at", "string"),
   1893             FieldSpec::required("file_path", "string"),
   1894             FieldSpec::required("mime_type", "string"),
   1895             FieldSpec::required("res_base", "string"),
   1896             FieldSpec::required("res_path", "string"),
   1897             FieldSpec::nullable("label", "string"),
   1898             FieldSpec::nullable("description", "string"),
   1899         ],
   1900     },
   1901     TypeSpec::Union {
   1902         name: "MediaImageFindManyRel",
   1903         variants: &[
   1904             VariantSpec::Object(&[FieldSpec::required(
   1905                 "on_trade_product",
   1906                 "MediaImageTradeProductArgs",
   1907             )]),
   1908             VariantSpec::Object(&[FieldSpec::required(
   1909                 "off_trade_product",
   1910                 "MediaImageTradeProductArgs",
   1911             )]),
   1912         ],
   1913     },
   1914     TypeSpec::Union {
   1915         name: "MediaImageQueryBindValues",
   1916         variants: &[
   1917             VariantSpec::Object(&[FieldSpec::required("id", "string")]),
   1918             VariantSpec::Object(&[FieldSpec::required("file_path", "string")]),
   1919         ],
   1920     },
   1921     TypeSpec::Object {
   1922         name: "MediaImageTradeProductArgs",
   1923         fields: &[FieldSpec::required("id", "string")],
   1924     },
   1925     TypeSpec::Object {
   1926         name: "NostrEventHead",
   1927         fields: &[
   1928             FieldSpec::required("id", "string"),
   1929             FieldSpec::required("created_at", "string"),
   1930             FieldSpec::required("updated_at", "string"),
   1931             FieldSpec::required("key", "string"),
   1932             FieldSpec::required("kind", "number"),
   1933             FieldSpec::required("pubkey", "string"),
   1934             FieldSpec::required("d_tag", "string"),
   1935             FieldSpec::required("last_event_id", "string"),
   1936             FieldSpec::required("last_created_at", "number"),
   1937             FieldSpec::required("content_hash", "string"),
   1938         ],
   1939     },
   1940     TypeSpec::Union {
   1941         name: "NostrEventHeadQueryBindValues",
   1942         variants: &[
   1943             VariantSpec::Object(&[FieldSpec::required("id", "string")]),
   1944             VariantSpec::Object(&[FieldSpec::required("key", "string")]),
   1945         ],
   1946     },
   1947     TypeSpec::Object {
   1948         name: "NostrProfile",
   1949         fields: &[
   1950             FieldSpec::required("id", "string"),
   1951             FieldSpec::required("created_at", "string"),
   1952             FieldSpec::required("updated_at", "string"),
   1953             FieldSpec::required("public_key", "string"),
   1954             FieldSpec::required("profile_type", "string"),
   1955             FieldSpec::required("name", "string"),
   1956             FieldSpec::nullable("display_name", "string"),
   1957             FieldSpec::nullable("about", "string"),
   1958             FieldSpec::nullable("website", "string"),
   1959             FieldSpec::nullable("picture", "string"),
   1960             FieldSpec::nullable("banner", "string"),
   1961             FieldSpec::nullable("nip05", "string"),
   1962             FieldSpec::nullable("lud06", "string"),
   1963             FieldSpec::nullable("lud16", "string"),
   1964         ],
   1965     },
   1966     TypeSpec::Union {
   1967         name: "NostrProfileFindManyRel",
   1968         variants: &[
   1969             VariantSpec::Object(&[FieldSpec::required("on_relay", "NostrProfileRelayArgs")]),
   1970             VariantSpec::Object(&[FieldSpec::required("off_relay", "NostrProfileRelayArgs")]),
   1971         ],
   1972     },
   1973     TypeSpec::Union {
   1974         name: "NostrProfileQueryBindValues",
   1975         variants: &[
   1976             VariantSpec::Object(&[FieldSpec::required("id", "string")]),
   1977             VariantSpec::Object(&[FieldSpec::required("public_key", "string")]),
   1978         ],
   1979     },
   1980     TypeSpec::Object {
   1981         name: "NostrProfileRelayArgs",
   1982         fields: &[FieldSpec::required("id", "string")],
   1983     },
   1984     TypeSpec::Object {
   1985         name: "NostrRelay",
   1986         fields: &[
   1987             FieldSpec::required("id", "string"),
   1988             FieldSpec::required("created_at", "string"),
   1989             FieldSpec::required("updated_at", "string"),
   1990             FieldSpec::required("url", "string"),
   1991             FieldSpec::nullable("relay_id", "string"),
   1992             FieldSpec::nullable("name", "string"),
   1993             FieldSpec::nullable("description", "string"),
   1994             FieldSpec::nullable("pubkey", "string"),
   1995             FieldSpec::nullable("contact", "string"),
   1996             FieldSpec::nullable("supported_nips", "string"),
   1997             FieldSpec::nullable("software", "string"),
   1998             FieldSpec::nullable("version", "string"),
   1999             FieldSpec::nullable("data", "string"),
   2000         ],
   2001     },
   2002     TypeSpec::Union {
   2003         name: "NostrRelayFindManyRel",
   2004         variants: &[
   2005             VariantSpec::Object(&[FieldSpec::required("on_profile", "NostrRelayProfileArgs")]),
   2006             VariantSpec::Object(&[FieldSpec::required("off_profile", "NostrRelayProfileArgs")]),
   2007         ],
   2008     },
   2009     TypeSpec::Object {
   2010         name: "NostrRelayProfileArgs",
   2011         fields: &[FieldSpec::required("public_key", "string")],
   2012     },
   2013     TypeSpec::Union {
   2014         name: "NostrRelayQueryBindValues",
   2015         variants: &[
   2016             VariantSpec::Object(&[FieldSpec::required("id", "string")]),
   2017             VariantSpec::Object(&[FieldSpec::required("url", "string")]),
   2018         ],
   2019     },
   2020     TypeSpec::Object {
   2021         name: "Plot",
   2022         fields: &[
   2023             FieldSpec::required("id", "string"),
   2024             FieldSpec::required("created_at", "string"),
   2025             FieldSpec::required("updated_at", "string"),
   2026             FieldSpec::required("d_tag", "string"),
   2027             FieldSpec::required("farm_id", "string"),
   2028             FieldSpec::required("name", "string"),
   2029             FieldSpec::nullable("about", "string"),
   2030             FieldSpec::nullable("location_primary", "string"),
   2031             FieldSpec::nullable("location_city", "string"),
   2032             FieldSpec::nullable("location_region", "string"),
   2033             FieldSpec::nullable("location_country", "string"),
   2034         ],
   2035     },
   2036     TypeSpec::Object {
   2037         name: "PlotGcsLocation",
   2038         fields: &[
   2039             FieldSpec::required("id", "string"),
   2040             FieldSpec::required("created_at", "string"),
   2041             FieldSpec::required("updated_at", "string"),
   2042             FieldSpec::required("plot_id", "string"),
   2043             FieldSpec::required("gcs_location_id", "string"),
   2044             FieldSpec::required("role", "string"),
   2045         ],
   2046     },
   2047     TypeSpec::Union {
   2048         name: "PlotGcsLocationQueryBindValues",
   2049         variants: &[
   2050             VariantSpec::Object(&[FieldSpec::required("id", "string")]),
   2051             VariantSpec::Object(&[FieldSpec::required("plot_id", "string")]),
   2052             VariantSpec::Object(&[FieldSpec::required("gcs_location_id", "string")]),
   2053         ],
   2054     },
   2055     TypeSpec::Union {
   2056         name: "PlotQueryBindValues",
   2057         variants: &[
   2058             VariantSpec::Object(&[FieldSpec::required("id", "string")]),
   2059             VariantSpec::Object(&[FieldSpec::required("d_tag", "string")]),
   2060             VariantSpec::Object(&[FieldSpec::required("farm_id", "string")]),
   2061         ],
   2062     },
   2063     TypeSpec::Object {
   2064         name: "PlotTag",
   2065         fields: &[
   2066             FieldSpec::required("id", "string"),
   2067             FieldSpec::required("created_at", "string"),
   2068             FieldSpec::required("updated_at", "string"),
   2069             FieldSpec::required("plot_id", "string"),
   2070             FieldSpec::required("tag", "string"),
   2071         ],
   2072     },
   2073     TypeSpec::Union {
   2074         name: "PlotTagQueryBindValues",
   2075         variants: &[
   2076             VariantSpec::Object(&[FieldSpec::required("id", "string")]),
   2077             VariantSpec::Object(&[FieldSpec::required("plot_id", "string")]),
   2078             VariantSpec::Object(&[FieldSpec::required("tag", "string")]),
   2079         ],
   2080     },
   2081     TypeSpec::Alias {
   2082         name: "ReplicaDbJsonValue",
   2083         target: "null | boolean | number | string | Array<ReplicaDbJsonValue> | { [key: string]: ReplicaDbJsonValue }",
   2084     },
   2085     TypeSpec::Object {
   2086         name: "TradeProduct",
   2087         fields: &[
   2088             FieldSpec::required("id", "string"),
   2089             FieldSpec::required("created_at", "string"),
   2090             FieldSpec::required("updated_at", "string"),
   2091             FieldSpec::required("key", "string"),
   2092             FieldSpec::required("category", "string"),
   2093             FieldSpec::required("title", "string"),
   2094             FieldSpec::required("summary", "string"),
   2095             FieldSpec::required("process", "string"),
   2096             FieldSpec::required("lot", "string"),
   2097             FieldSpec::required("profile", "string"),
   2098             FieldSpec::required("year", "bigint"),
   2099             FieldSpec::required("qty_amt", "number"),
   2100             FieldSpec::nullable("qty_amt_exact", "string"),
   2101             FieldSpec::required("qty_unit", "string"),
   2102             FieldSpec::nullable("qty_label", "string"),
   2103             FieldSpec::nullable("qty_avail", "bigint"),
   2104             FieldSpec::required("price_amt", "number"),
   2105             FieldSpec::nullable("price_amt_exact", "string"),
   2106             FieldSpec::required("price_currency", "string"),
   2107             FieldSpec::required("price_qty_amt", "number"),
   2108             FieldSpec::nullable("price_qty_amt_exact", "string"),
   2109             FieldSpec::required("price_qty_unit", "string"),
   2110             FieldSpec::nullable("listing_addr", "string"),
   2111             FieldSpec::nullable("primary_bin_id", "string"),
   2112             FieldSpec::nullable("verified_primary_bin_id", "string"),
   2113             FieldSpec::nullable("notes", "string"),
   2114         ],
   2115     },
   2116     TypeSpec::Union {
   2117         name: "TradeProductQueryBindValues",
   2118         variants: &[VariantSpec::Object(&[FieldSpec::required("id", "string")])],
   2119     },
   2120 ];
   2121 
   2122 #[cfg(test)]
   2123 mod tests {
   2124     use super::{FieldSpec, TYPE_SPECS, TypeSpec, VariantSpec, dto_registry, type_inventory};
   2125 
   2126     #[test]
   2127     fn registry_exports_known_schema_types() {
   2128         let registry = dto_registry();
   2129         assert!(!registry.has_errors(), "{:?}", registry.diagnostics);
   2130         assert!(type_inventory().contains(&"Farm"));
   2131         assert!(type_inventory().contains(&"NostrEventHead"));
   2132         assert!(type_inventory().contains(&"ReplicaDbJsonValue"));
   2133     }
   2134 
   2135     #[test]
   2136     fn source_find_one_resolves_preserve_nullable_result() {
   2137         assert!(TYPE_SPECS.iter().any(|spec| matches!(
   2138             spec,
   2139             TypeSpec::Alias {
   2140                 name: "IFarmFindOneResolve",
   2141                 target: "IResult<Farm | null>"
   2142             }
   2143         )));
   2144     }
   2145 
   2146     #[test]
   2147     fn relation_find_many_inputs_preserve_filter_and_rel_variants() {
   2148         for (name, filter, rel) in [
   2149             (
   2150                 "IGcsLocationFindMany",
   2151                 "IGcsLocationFieldsFilter",
   2152                 "GcsLocationFindManyRel",
   2153             ),
   2154             (
   2155                 "IMediaImageFindMany",
   2156                 "IMediaImageFieldsFilter",
   2157                 "MediaImageFindManyRel",
   2158             ),
   2159             (
   2160                 "INostrProfileFindMany",
   2161                 "INostrProfileFieldsFilter",
   2162                 "NostrProfileFindManyRel",
   2163             ),
   2164             (
   2165                 "INostrRelayFindMany",
   2166                 "INostrRelayFieldsFilter",
   2167                 "NostrRelayFindManyRel",
   2168             ),
   2169         ] {
   2170             assert!(TYPE_SPECS.iter().any(|spec| matches!(
   2171                 spec,
   2172                 TypeSpec::Union { name: actual_name, variants }
   2173                     if *actual_name == name
   2174                         && variants.len() == 2
   2175                         && matches!(variants[0], VariantSpec::Object(fields) if fields.len() == 1 && fields[0] == FieldSpec::nullable("filter", filter))
   2176                         && matches!(variants[1], VariantSpec::Object(fields) if fields.len() == 1 && fields[0] == FieldSpec::required("rel", rel))
   2177             )));
   2178         }
   2179     }
   2180 
   2181     #[test]
   2182     fn serde_json_value_policy_is_explicit() {
   2183         assert!(TYPE_SPECS.iter().any(|spec| matches!(
   2184             spec,
   2185             TypeSpec::Alias { name: "ReplicaDbJsonValue", target } if target.contains("[key: string]: ReplicaDbJsonValue")
   2186         )));
   2187         assert!(TYPE_SPECS.iter().any(|spec| matches!(
   2188             spec,
   2189             TypeSpec::Object { name: "ITradeProductFieldsPartial", fields } if fields.iter().any(|field| field.name == "year" && field.target == "ReplicaDbJsonValue" && field.optional && field.nullable)
   2190         )));
   2191     }
   2192 
   2193     #[test]
   2194     fn trade_product_large_integer_policy_is_explicit() {
   2195         assert!(TYPE_SPECS.iter().any(|spec| matches!(
   2196             spec,
   2197             TypeSpec::Object { name: "TradeProduct", fields } if fields.iter().any(|field| field.name == "year" && field.target == "bigint")
   2198         )));
   2199         assert!(TYPE_SPECS.iter().any(|spec| matches!(
   2200             spec,
   2201             TypeSpec::Object { name: "ITradeProductFieldsFilter", fields } if fields.iter().any(|field| field.name == "qty_avail" && field.target == "bigint" && field.optional)
   2202         )));
   2203     }
   2204 }