@@ -87,122 +87,123 @@ impl RawRelayMessage {
87
87
// Notice
88
88
// Relay response format: ["NOTICE", <message>]
89
89
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 {
91
95
return Err ( MessageHandleError :: InvalidMessageFormat ) ;
92
96
}
93
- return Ok ( Self :: Notice {
94
- message : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
95
- } ) ;
96
97
}
97
98
98
99
// Closed
99
100
// Relay response format: ["CLOSED", <subscription_id>, <message>]
100
101
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 {
102
108
return Err ( MessageHandleError :: InvalidMessageFormat ) ;
103
109
}
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
- } ) ;
109
110
}
110
111
111
112
// Event
112
113
// Relay response format: ["EVENT", <subscription id>, <event JSON>]
113
114
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 {
115
121
return Err ( MessageHandleError :: InvalidMessageFormat ) ;
116
122
}
117
-
118
- return Ok ( Self :: Event {
119
- subscription_id : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
120
- event : v[ 2 ] . clone ( ) ,
121
- } ) ;
122
123
}
123
124
124
125
// EOSE (NIP-15)
125
126
// Relay response format: ["EOSE", <subscription_id>]
126
127
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 {
128
132
return Err ( MessageHandleError :: InvalidMessageFormat ) ;
129
133
}
130
-
131
- let subscription_id: String = serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?;
132
- return Ok ( Self :: EndOfStoredEvents ( subscription_id) ) ;
133
134
}
134
135
135
136
// OK (NIP-20)
136
137
// Relay response format: ["OK", <event_id>, <true|false>, <message>]
137
138
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 {
139
146
return Err ( MessageHandleError :: InvalidMessageFormat ) ;
140
147
}
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
- } ) ;
147
148
}
148
149
149
150
// OK (NIP-42)
150
151
// Relay response format: ["AUTH", <challenge>]
151
152
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 {
153
158
return Err ( MessageHandleError :: InvalidMessageFormat ) ;
154
159
}
155
-
156
- return Ok ( Self :: Auth {
157
- challenge : serde_json:: from_value ( v[ 1 ] . clone ( ) ) ?,
158
- } ) ;
159
160
}
160
161
161
162
// Relay response format: ["EVENT", <subscription id>, <event JSON>]
162
163
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 {
164
179
return Err ( MessageHandleError :: InvalidMessageFormat ) ;
165
180
}
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
- } ) ;
180
181
}
181
182
182
183
// Negentropy Message
183
184
// ["NEG-MSG", <subscription ID string>, <message, lowercase hex-encoded>]
184
185
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 {
186
192
return Err ( MessageHandleError :: InvalidMessageFormat ) ;
187
193
}
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
- } ) ;
193
194
}
194
195
195
196
// Negentropy Error
196
197
// ["NEG-ERR", <subscription ID string>, <reason-code>]
197
198
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 {
199
205
return Err ( MessageHandleError :: InvalidMessageFormat ) ;
200
206
}
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
- } ) ;
206
207
}
207
208
208
209
Err ( MessageHandleError :: InvalidMessageFormat )
0 commit comments