Skip to content

Commit 7e4e719

Browse files
committed
nostr: add NEG-OPEN client message
1 parent 382cef3 commit 7e4e719

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

crates/nostr/src/message/client.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,17 @@ pub enum ClientMessage {
4444
Close(SubscriptionId),
4545
/// Auth
4646
Auth(Box<Event>),
47+
/// Negentropy Open
48+
NegOpen {
49+
/// Subscription ID
50+
subscription_id: SubscriptionId,
51+
/// Filter
52+
filter: Box<Filter>,
53+
/// ID size (MUST be between 8 and 32, inclusive)
54+
id_size: u8,
55+
/// Initial message
56+
initial_message: String,
57+
},
4758
}
4859

4960
impl Serialize for ClientMessage {
@@ -150,6 +161,20 @@ impl ClientMessage {
150161
}
151162
Self::Close(subscription_id) => json!(["CLOSE", subscription_id]),
152163
Self::Auth(event) => json!(["AUTH", event]),
164+
Self::NegOpen {
165+
subscription_id,
166+
filter,
167+
id_size,
168+
initial_message,
169+
} => {
170+
json!([
171+
"NEG-OPEN",
172+
subscription_id,
173+
filter,
174+
id_size,
175+
initial_message
176+
])
177+
}
153178
}
154179
}
155180

@@ -243,6 +268,26 @@ impl ClientMessage {
243268
return Ok(Self::new_auth(event));
244269
}
245270

271+
// Negentropy Open
272+
// ["NEG-OPEN", <subscription ID string>, <filter>, <idSize>, <initialMessage, lowercase hex-encoded>]
273+
if v[0] == "NEG-OPEN" {
274+
if v_len != 5 {
275+
return Err(MessageHandleError::InvalidMessageFormat);
276+
}
277+
let subscription_id = SubscriptionId::new(v[1].to_string());
278+
let filter = Filter::from_json(v[2].to_string())?;
279+
let id_size = v[3]
280+
.as_u64()
281+
.ok_or(MessageHandleError::InvalidMessageFormat)? as u8;
282+
let initial_message = v[4].to_string();
283+
return Ok(Self::NegOpen {
284+
subscription_id,
285+
filter: Box::new(filter),
286+
id_size,
287+
initial_message,
288+
});
289+
}
290+
246291
Err(MessageHandleError::InvalidMessageFormat)
247292
}
248293

0 commit comments

Comments
 (0)