Skip to content

Commit 6b3ae77

Browse files
committed
nostr/event/tag: allow a tags to lack relay URL
1 parent 8ad4128 commit 6b3ae77

File tree

1 file changed

+28
-9
lines changed

1 file changed

+28
-9
lines changed

crates/nostr/src/event/tag.rs

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ pub enum Tag {
284284
kind: Kind,
285285
public_key: XOnlyPublicKey,
286286
identifier: String,
287-
relay_url: UncheckedUrl,
287+
relay_url: Option<UncheckedUrl>,
288288
},
289289
Relay(UncheckedUrl),
290290
ContactList {
@@ -402,7 +402,21 @@ where
402402
}
403403
} else if tag_len == 2 {
404404
let content: &str = &tag[1];
405+
405406
match tag_kind {
407+
TagKind::A => {
408+
let kpi: Vec<&str> = tag[1].split(':').collect();
409+
if kpi.len() == 3 {
410+
Ok(Self::A {
411+
kind: Kind::from_str(kpi[0])?,
412+
public_key: XOnlyPublicKey::from_str(kpi[1])?,
413+
identifier: kpi[2].to_string(),
414+
relay_url: None,
415+
})
416+
} else {
417+
Err(Error::InvalidLength)
418+
}
419+
}
406420
TagKind::P => Ok(Self::PubKey(XOnlyPublicKey::from_str(content)?, None)),
407421
TagKind::E => Ok(Self::Event(EventId::from_hex(content)?, None, None)),
408422
TagKind::R => Ok(Self::Reference(content.to_string())),
@@ -471,7 +485,7 @@ where
471485
kind: Kind::from_str(kpi[0])?,
472486
public_key: XOnlyPublicKey::from_str(kpi[1])?,
473487
identifier: kpi[2].to_string(),
474-
relay_url: UncheckedUrl::from(tag[2].clone()),
488+
relay_url: Some(UncheckedUrl::from(tag[2].clone())),
475489
})
476490
} else {
477491
Err(Error::InvalidLength)
@@ -570,11 +584,16 @@ impl From<Tag> for Vec<String> {
570584
public_key,
571585
identifier,
572586
relay_url,
573-
} => vec![
574-
TagKind::A.to_string(),
575-
format!("{}:{public_key}:{identifier}", kind.as_u64()),
576-
relay_url.to_string(),
577-
],
587+
} => {
588+
let mut vec = vec![
589+
TagKind::A.to_string(),
590+
format!("{}:{public_key}:{identifier}", kind.as_u64()),
591+
];
592+
if let Some(relay) = relay_url {
593+
vec.push(relay.to_string());
594+
}
595+
vec
596+
}
578597
Tag::Relay(url) => vec![TagKind::Relay.to_string(), url.to_string()],
579598
Tag::ContactList {
580599
pk,
@@ -898,7 +917,7 @@ mod tests {
898917
"a695f6b60119d9521934a691347d9f78e8770b56da16bb255ee286ddf9fda919"
899918
)?,
900919
identifier: String::from("ipsum"),
901-
relay_url: UncheckedUrl::from("wss://relay.nostr.org")
920+
relay_url: Some(UncheckedUrl::from_str("wss://relay.nostr.org")?)
902921
}
903922
.as_vec()
904923
);
@@ -1119,7 +1138,7 @@ mod tests {
11191138
"a695f6b60119d9521934a691347d9f78e8770b56da16bb255ee286ddf9fda919"
11201139
)?,
11211140
identifier: String::from("ipsum"),
1122-
relay_url: UncheckedUrl::from("wss://relay.nostr.org")
1141+
relay_url: Some(UncheckedUrl::from_str("wss://relay.nostr.org")?)
11231142
}
11241143
);
11251144

0 commit comments

Comments
 (0)