@@ -87,122 +87,123 @@ impl RawRelayMessage {
8787 // Notice
8888 // Relay response format: ["NOTICE", <message>]
8989 if v[ 0 ] == "NOTICE" {
90- if v_len != 2 {
90+ if v_len >= 2 {
91+ return Ok ( Self :: Notice {
92+ message : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
93+ } ) ;
94+ } else {
9195 return Err ( MessageHandleError :: InvalidMessageFormat ) ;
9296 }
93- return Ok ( Self :: Notice {
94- message : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
95- } ) ;
9697 }
9798
9899 // Closed
99100 // Relay response format: ["CLOSED", <subscription_id>, <message>]
100101 if v[ 0 ] == "CLOSED" {
101- if v_len != 3 {
102+ if v_len >= 3 {
103+ return Ok ( Self :: Closed {
104+ subscription_id : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
105+ message : serde_json:: from_value ( v[ 2 ] . clone ( ) ) ?,
106+ } ) ;
107+ } else {
102108 return Err ( MessageHandleError :: InvalidMessageFormat ) ;
103109 }
104-
105- return Ok ( Self :: Closed {
106- subscription_id : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
107- message : serde_json:: from_value ( v[ 2 ] . clone ( ) ) ?,
108- } ) ;
109110 }
110111
111112 // Event
112113 // Relay response format: ["EVENT", <subscription id>, <event JSON>]
113114 if v[ 0 ] == "EVENT" {
114- if v_len != 3 {
115+ if v_len >= 3 {
116+ return Ok ( Self :: Event {
117+ subscription_id : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
118+ event : v[ 2 ] . clone ( ) ,
119+ } ) ;
120+ } else {
115121 return Err ( MessageHandleError :: InvalidMessageFormat ) ;
116122 }
117-
118- return Ok ( Self :: Event {
119- subscription_id : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
120- event : v[ 2 ] . clone ( ) ,
121- } ) ;
122123 }
123124
124125 // EOSE (NIP-15)
125126 // Relay response format: ["EOSE", <subscription_id>]
126127 if v[ 0 ] == "EOSE" {
127- if v_len != 2 {
128+ if v_len >= 2 {
129+ let subscription_id: String = serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?;
130+ return Ok ( Self :: EndOfStoredEvents ( subscription_id) ) ;
131+ } else {
128132 return Err ( MessageHandleError :: InvalidMessageFormat ) ;
129133 }
130-
131- let subscription_id: String = serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?;
132- return Ok ( Self :: EndOfStoredEvents ( subscription_id) ) ;
133134 }
134135
135136 // OK (NIP-20)
136137 // Relay response format: ["OK", <event_id>, <true|false>, <message>]
137138 if v[ 0 ] == "OK" {
138- if v_len != 4 {
139+ if v_len >= 4 {
140+ return Ok ( Self :: Ok {
141+ event_id : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
142+ status : serde_json:: from_value ( v[ 2 ] . clone ( ) ) ?,
143+ message : serde_json:: from_value ( v[ 3 ] . clone ( ) ) ?,
144+ } ) ;
145+ } else {
139146 return Err ( MessageHandleError :: InvalidMessageFormat ) ;
140147 }
141-
142- return Ok ( Self :: Ok {
143- event_id : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
144- status : serde_json:: from_value ( v[ 2 ] . clone ( ) ) ?,
145- message : serde_json:: from_value ( v[ 3 ] . clone ( ) ) ?,
146- } ) ;
147148 }
148149
149150 // OK (NIP-42)
150151 // Relay response format: ["AUTH", <challenge>]
151152 if v[ 0 ] == "AUTH" {
152- if v_len != 2 {
153+ if v_len >= 2 {
154+ return Ok ( Self :: Auth {
155+ challenge : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
156+ } ) ;
157+ } else {
153158 return Err ( MessageHandleError :: InvalidMessageFormat ) ;
154159 }
155-
156- return Ok ( Self :: Auth {
157- challenge : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
158- } ) ;
159160 }
160161
161162 // Relay response format: ["EVENT", <subscription id>, <event JSON>]
162163 if v[ 0 ] == "COUNT" {
163- if v_len != 3 {
164+ if v_len >= 3 {
165+ let map = v[ 2 ]
166+ . as_object ( )
167+ . ok_or ( MessageHandleError :: InvalidMessageFormat ) ?;
168+ let count: Value = map
169+ . get ( "count" )
170+ . ok_or ( MessageHandleError :: InvalidMessageFormat ) ?
171+ . clone ( ) ;
172+ let count: usize = serde_json:: from_value ( count) ?;
173+
174+ return Ok ( Self :: Count {
175+ subscription_id : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
176+ count,
177+ } ) ;
178+ } else {
164179 return Err ( MessageHandleError :: InvalidMessageFormat ) ;
165180 }
166-
167- let map = v[ 2 ]
168- . as_object ( )
169- . ok_or ( MessageHandleError :: InvalidMessageFormat ) ?;
170- let count: Value = map
171- . get ( "count" )
172- . ok_or ( MessageHandleError :: InvalidMessageFormat ) ?
173- . clone ( ) ;
174- let count: usize = serde_json:: from_value ( count) ?;
175-
176- return Ok ( Self :: Count {
177- subscription_id : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
178- count,
179- } ) ;
180181 }
181182
182183 // Negentropy Message
183184 // ["NEG-MSG", <subscription ID string>, <message, lowercase hex-encoded>]
184185 if v[ 0 ] == "NEG-MSG" {
185- if v_len != 3 {
186+ if v_len >= 3 {
187+ return Ok ( Self :: NegMsg {
188+ subscription_id : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
189+ message : serde_json:: from_value ( v[ 2 ] . clone ( ) ) ?,
190+ } ) ;
191+ } else {
186192 return Err ( MessageHandleError :: InvalidMessageFormat ) ;
187193 }
188-
189- return Ok ( Self :: NegMsg {
190- subscription_id : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
191- message : serde_json:: from_value ( v[ 2 ] . clone ( ) ) ?,
192- } ) ;
193194 }
194195
195196 // Negentropy Error
196197 // ["NEG-ERR", <subscription ID string>, <reason-code>]
197198 if v[ 0 ] == "NEG-ERR" {
198- if v_len != 3 {
199+ if v_len >= 3 {
200+ return Ok ( Self :: NegErr {
201+ subscription_id : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
202+ code : serde_json:: from_value ( v[ 2 ] . clone ( ) ) ?,
203+ } ) ;
204+ } else {
199205 return Err ( MessageHandleError :: InvalidMessageFormat ) ;
200206 }
201-
202- return Ok ( Self :: NegErr {
203- subscription_id : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
204- code : serde_json:: from_value ( v[ 2 ] . clone ( ) ) ?,
205- } ) ;
206207 }
207208
208209 Err ( MessageHandleError :: InvalidMessageFormat )
0 commit comments