lib

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

commit bd325cdec369fc0ad356db4894d530be72d8978e
parent 24438809cc6af8276fb0bca55bcf87fd5f2b5ca3
Author: triesap <tyson@radroots.org>
Date:   Wed, 24 Jun 2026 22:20:19 +0000

replica_db_schema: restore relation find-many dto descriptors

Diffstat:
Mcrates/replica_db_schema/src/dto.rs | 65++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 64 insertions(+), 1 deletion(-)

diff --git a/crates/replica_db_schema/src/dto.rs b/crates/replica_db_schema/src/dto.rs @@ -871,6 +871,13 @@ const TYPE_SPECS: &[TypeSpec] = &[ FieldSpec::optional_nullable("gc_country_name", "ReplicaDbJsonValue"), ], }, + TypeSpec::Union { + name: "IGcsLocationFindMany", + variants: &[ + VariantSpec::Object(&[FieldSpec::nullable("filter", "IGcsLocationFieldsFilter")]), + VariantSpec::Object(&[FieldSpec::required("rel", "GcsLocationFindManyRel")]), + ], + }, TypeSpec::Alias { name: "IGcsLocationFindManyResolve", target: "IResultList<GcsLocation>", @@ -1058,6 +1065,13 @@ const TYPE_SPECS: &[TypeSpec] = &[ FieldSpec::optional_nullable("description", "ReplicaDbJsonValue"), ], }, + TypeSpec::Union { + name: "IMediaImageFindMany", + variants: &[ + VariantSpec::Object(&[FieldSpec::nullable("filter", "IMediaImageFieldsFilter")]), + VariantSpec::Object(&[FieldSpec::required("rel", "MediaImageFindManyRel")]), + ], + }, TypeSpec::Alias { name: "IMediaImageFindManyResolve", target: "IResultList<MediaImage>", @@ -1257,6 +1271,13 @@ const TYPE_SPECS: &[TypeSpec] = &[ FieldSpec::optional_nullable("lud16", "ReplicaDbJsonValue"), ], }, + TypeSpec::Union { + name: "INostrProfileFindMany", + variants: &[ + VariantSpec::Object(&[FieldSpec::nullable("filter", "INostrProfileFieldsFilter")]), + VariantSpec::Object(&[FieldSpec::required("rel", "NostrProfileFindManyRel")]), + ], + }, TypeSpec::Alias { name: "INostrProfileFindManyResolve", target: "IResultList<NostrProfile>", @@ -1370,6 +1391,13 @@ const TYPE_SPECS: &[TypeSpec] = &[ FieldSpec::optional_nullable("data", "ReplicaDbJsonValue"), ], }, + TypeSpec::Union { + name: "INostrRelayFindMany", + variants: &[ + VariantSpec::Object(&[FieldSpec::nullable("filter", "INostrRelayFieldsFilter")]), + VariantSpec::Object(&[FieldSpec::required("rel", "NostrRelayFindManyRel")]), + ], + }, TypeSpec::Alias { name: "INostrRelayFindManyResolve", target: "IResultList<NostrRelay>", @@ -2093,7 +2121,7 @@ const TYPE_SPECS: &[TypeSpec] = &[ #[cfg(test)] mod tests { - use super::{TYPE_SPECS, TypeSpec, dto_registry, type_inventory}; + use super::{FieldSpec, TYPE_SPECS, TypeSpec, VariantSpec, dto_registry, type_inventory}; #[test] fn registry_exports_known_schema_types() { @@ -2116,6 +2144,41 @@ mod tests { } #[test] + fn relation_find_many_inputs_preserve_filter_and_rel_variants() { + for (name, filter, rel) in [ + ( + "IGcsLocationFindMany", + "IGcsLocationFieldsFilter", + "GcsLocationFindManyRel", + ), + ( + "IMediaImageFindMany", + "IMediaImageFieldsFilter", + "MediaImageFindManyRel", + ), + ( + "INostrProfileFindMany", + "INostrProfileFieldsFilter", + "NostrProfileFindManyRel", + ), + ( + "INostrRelayFindMany", + "INostrRelayFieldsFilter", + "NostrRelayFindManyRel", + ), + ] { + assert!(TYPE_SPECS.iter().any(|spec| matches!( + spec, + TypeSpec::Union { name: actual_name, variants } + if *actual_name == name + && variants.len() == 2 + && matches!(variants[0], VariantSpec::Object(fields) if fields.len() == 1 && fields[0] == FieldSpec::nullable("filter", filter)) + && matches!(variants[1], VariantSpec::Object(fields) if fields.len() == 1 && fields[0] == FieldSpec::required("rel", rel)) + ))); + } + } + + #[test] fn serde_json_value_policy_is_explicit() { assert!(TYPE_SPECS.iter().any(|spec| matches!( spec,