Skip to content

Commit 5c35019

Browse files
committed
nostr: fix NEG messages deserialization
1 parent 9747a15 commit 5c35019

File tree

3 files changed

+34
-17
lines changed

3 files changed

+34
-17
lines changed

crates/nostr/src/message/client.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -307,12 +307,12 @@ impl ClientMessage {
307307
if v_len != 5 {
308308
return Err(MessageHandleError::InvalidMessageFormat);
309309
}
310-
let subscription_id = SubscriptionId::new(v[1].to_string());
311-
let filter = Filter::from_json(v[2].to_string())?;
312-
let id_size = v[3]
313-
.as_u64()
314-
.ok_or(MessageHandleError::InvalidMessageFormat)? as u8;
315-
let initial_message = v[4].to_string();
310+
let subscription_id: SubscriptionId = serde_json::from_value(v[1].clone())?;
311+
let filter: Filter = Filter::from_json(v[2].to_string())?;
312+
let id_size: u8 =
313+
v[3].as_u64()
314+
.ok_or(MessageHandleError::InvalidMessageFormat)? as u8;
315+
let initial_message: String = serde_json::from_value(v[4].clone())?;
316316
return Ok(Self::NegOpen {
317317
subscription_id,
318318
filter: Box::new(filter),
@@ -327,8 +327,8 @@ impl ClientMessage {
327327
if v_len != 3 {
328328
return Err(MessageHandleError::InvalidMessageFormat);
329329
}
330-
let subscription_id: SubscriptionId = SubscriptionId::new(v[1].to_string());
331-
let message: String = v[2].to_string();
330+
let subscription_id: SubscriptionId = serde_json::from_value(v[1].clone())?;
331+
let message: String = serde_json::from_value(v[2].clone())?;
332332
return Ok(Self::NegMsg {
333333
subscription_id,
334334
message,
@@ -341,7 +341,7 @@ impl ClientMessage {
341341
if v_len != 2 {
342342
return Err(MessageHandleError::InvalidMessageFormat);
343343
}
344-
let subscription_id: SubscriptionId = SubscriptionId::new(v[1].to_string());
344+
let subscription_id: SubscriptionId = serde_json::from_value(v[1].clone())?;
345345
return Ok(Self::NegClose { subscription_id });
346346
}
347347

crates/nostr/src/message/relay.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -314,11 +314,8 @@ impl RelayMessage {
314314
}
315315

316316
let event_id: EventId = serde_json::from_value(v[1].clone())?;
317-
318317
let status: bool = serde_json::from_value(v[2].clone())?;
319-
320318
let message: String = serde_json::from_value(v[3].clone())?;
321-
322319
return Ok(Self::new_ok(event_id, status, message));
323320
}
324321

@@ -358,8 +355,8 @@ impl RelayMessage {
358355
if v_len != 3 {
359356
return Err(MessageHandleError::InvalidMessageFormat);
360357
}
361-
let subscription_id: SubscriptionId = SubscriptionId::new(v[1].to_string());
362-
let message: String = v[2].to_string();
358+
let subscription_id: SubscriptionId = serde_json::from_value(v[1].clone())?;
359+
let message: String = serde_json::from_value(v[2].clone())?;
363360
return Ok(Self::NegMsg {
364361
subscription_id,
365362
message,
@@ -372,8 +369,8 @@ impl RelayMessage {
372369
if v_len != 3 {
373370
return Err(MessageHandleError::InvalidMessageFormat);
374371
}
375-
let subscription_id: SubscriptionId = SubscriptionId::new(v[1].to_string());
376-
let code: NegentropyErrorCode = NegentropyErrorCode::from(v[2].to_string());
372+
let subscription_id: SubscriptionId = serde_json::from_value(v[1].clone())?;
373+
let code: NegentropyErrorCode = serde_json::from_value(v[2].clone())?;
377374
return Ok(Self::NegErr {
378375
subscription_id,
379376
code,

crates/nostr/src/message/subscription.rs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ impl<'de> Deserialize<'de> for Alphabet {
162162
}
163163

164164
/// Subscription ID
165-
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
165+
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
166166
pub struct SubscriptionId(String);
167167

168168
impl SubscriptionId {
@@ -199,6 +199,26 @@ impl fmt::Display for SubscriptionId {
199199
}
200200
}
201201

202+
impl Serialize for SubscriptionId {
203+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
204+
where
205+
S: Serializer,
206+
{
207+
serializer.serialize_str(&self.to_string())
208+
}
209+
}
210+
211+
impl<'de> Deserialize<'de> for SubscriptionId {
212+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
213+
where
214+
D: Deserializer<'de>,
215+
{
216+
let value = Value::deserialize(deserializer)?;
217+
let id: String = serde_json::from_value(value).map_err(serde::de::Error::custom)?;
218+
Ok(Self::new(id))
219+
}
220+
}
221+
202222
/// Subscription filters
203223
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
204224
pub struct Filter {

0 commit comments

Comments
 (0)