dto.rs (5083B)
1 #![allow(dead_code, unused_imports)] 2 3 use crate::envelope::EventEnvelope; 4 5 #[derive(dto_bindgen::Dto)] 6 #[dto(export)] 7 pub struct Nip01EventWireDto { 8 pub id: String, 9 pub pubkey: String, 10 #[dto(int = "json_number")] 11 pub created_at: u64, 12 pub kind: u32, 13 pub tags: Vec<Vec<String>>, 14 pub content: String, 15 pub sig: String, 16 pub extra: Nip01EventExtraDto, 17 } 18 19 #[derive(dto_bindgen::Dto)] 20 #[dto(export)] 21 #[dto(as = "string_enum")] 22 pub enum SignedEventVerificationStateDto { 23 #[dto(rename = "id_verified")] 24 IdVerified, 25 } 26 27 #[derive(dto_bindgen::Dto)] 28 #[dto(export)] 29 #[dto(as = "string_enum")] 30 pub enum VerifiedSignedEventVerificationStateDto { 31 #[dto(rename = "signature_verified")] 32 SignatureVerified, 33 } 34 35 #[derive(dto_bindgen::Dto)] 36 #[dto(export)] 37 pub struct SignedEventDto { 38 pub state: SignedEventVerificationStateDto, 39 pub envelope: EventEnvelope, 40 pub wire: Nip01EventWireDto, 41 pub raw_json: String, 42 } 43 44 #[derive(dto_bindgen::Dto)] 45 #[dto(export)] 46 pub struct VerifiedSignedEventDto { 47 pub state: VerifiedSignedEventVerificationStateDto, 48 pub signed_event: SignedEventDto, 49 } 50 51 pub struct Nip01EventExtraDto; 52 53 impl dto_bindgen::Dto for Nip01EventExtraDto { 54 fn describe(_ctx: &mut dto_bindgen::__private::DescribeCtx) -> dto_bindgen::__private::TypeRef { 55 dto_bindgen::__private::TypeRef::Override(dto_bindgen::__private::TargetOverride::new( 56 dto_bindgen::__private::BackendId::TypeScript, 57 "{ [key: string]: unknown }", 58 )) 59 } 60 } 61 62 #[path = "generated/dto_roots.rs"] 63 mod generated_roots; 64 65 pub use generated_roots::dto_bindgen_roots as dto_roots; 66 67 #[cfg(test)] 68 #[cfg_attr(coverage_nightly, coverage(off))] 69 mod tests { 70 use std::collections::BTreeSet; 71 72 use dto_bindgen::export::{Registry, build_registry}; 73 74 use super::dto_roots; 75 76 #[test] 77 fn event_descriptor_roots_build_registry() { 78 let registry = build_registry(dto_roots()); 79 80 assert!(!registry.has_errors()); 81 assert_eq!(registry.roots.len(), dto_roots().len()); 82 let export_names = registry_export_names(®istry); 83 84 assert!(export_names.contains("EventEnvelope")); 85 assert!(export_names.contains("Nip01EventWireDto")); 86 assert!(export_names.contains("SignedEventDto")); 87 assert!(export_names.contains("VerifiedSignedEventDto")); 88 assert!(export_names.contains("OperationalListingImageSize")); 89 } 90 91 #[test] 92 fn option_fields_are_optional_nullable() { 93 let registry = build_registry(dto_roots()); 94 95 let summary = registry 96 .struct_field_presence("OperationalListingProduct", "summary") 97 .expect("summary field exists"); 98 assert!(!summary.required_on_deserialize); 99 assert!(summary.nullable); 100 101 let d_tag = registry 102 .struct_field_presence("EventRef", "d_tag") 103 .expect("d_tag field exists"); 104 assert!(!d_tag.required_on_deserialize); 105 assert!(d_tag.nullable); 106 } 107 108 #[test] 109 fn order_descriptor_roots_are_source_owned() { 110 let registry = build_registry(dto_roots()); 111 let export_names = registry_export_names(®istry); 112 let rust_names = registry_rust_names(®istry); 113 114 for obsolete_export in [ 115 "OrderEnvelope", 116 "RadrootsCommercialEnvelope", 117 "RadrootsCommercialMessagePayload", 118 "RadrootsCommercialMessageType", 119 "RadrootsCommercialTransportLane", 120 "RadrootsOrderStatus", 121 "RadrootsOrderQuestion", 122 "RadrootsOrderAnswer", 123 "RadrootsOrderDiscountRequest", 124 "RadrootsOrderDiscountOffer", 125 "RadrootsOrderDiscountDecision", 126 "RadrootsListingCancel", 127 "RadrootsOperationalListingCancel", 128 "RadrootsOrderChange", 129 "RadrootsOrderResponse", 130 "RadrootsOrderRevision", 131 "RadrootsOrderRevisionResponse", 132 "RadrootsOrderRevisionProposal", 133 "RadrootsOrderRevisionDecision", 134 "RadrootsOrderRevisionOutcome", 135 "RadrootsTradeValidationListingRequest", 136 "RadrootsTradeValidationListingResult", 137 ] { 138 assert!( 139 !export_names.contains(obsolete_export), 140 "{obsolete_export} should not remain as a binding-only descriptor root" 141 ); 142 } 143 144 for source_root in [ 145 "CommercialDomain", 146 "OrderEventType", 147 "OrderRequest", 148 "OrderDecision", 149 "OrderDecisionOutcome", 150 "OrderCancellation", 151 "OperationalListingParseError", 152 ] { 153 assert!( 154 rust_names.contains(source_root), 155 "{source_root} should be registered from source" 156 ); 157 } 158 } 159 160 fn registry_export_names(registry: &Registry) -> BTreeSet<&str> { 161 registry.type_export_names().collect() 162 } 163 164 fn registry_rust_names(registry: &Registry) -> BTreeSet<&str> { 165 registry.type_rust_names().collect() 166 } 167 }