@@ -284,7 +284,7 @@ pub enum Tag {
284
284
kind : Kind ,
285
285
public_key : XOnlyPublicKey ,
286
286
identifier : String ,
287
- relay_url : UncheckedUrl ,
287
+ relay_url : Option < UncheckedUrl > ,
288
288
} ,
289
289
Relay ( UncheckedUrl ) ,
290
290
ContactList {
@@ -402,7 +402,21 @@ where
402
402
}
403
403
} else if tag_len == 2 {
404
404
let content: & str = & tag[ 1 ] ;
405
+
405
406
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
+ }
406
420
TagKind :: P => Ok ( Self :: PubKey ( XOnlyPublicKey :: from_str ( content) ?, None ) ) ,
407
421
TagKind :: E => Ok ( Self :: Event ( EventId :: from_hex ( content) ?, None , None ) ) ,
408
422
TagKind :: R => Ok ( Self :: Reference ( content. to_string ( ) ) ) ,
@@ -471,7 +485,7 @@ where
471
485
kind : Kind :: from_str ( kpi[ 0 ] ) ?,
472
486
public_key : XOnlyPublicKey :: from_str ( kpi[ 1 ] ) ?,
473
487
identifier : kpi[ 2 ] . to_string ( ) ,
474
- relay_url : UncheckedUrl :: from ( tag[ 2 ] . clone ( ) ) ,
488
+ relay_url : Some ( UncheckedUrl :: from ( tag[ 2 ] . clone ( ) ) ) ,
475
489
} )
476
490
} else {
477
491
Err ( Error :: InvalidLength )
@@ -570,11 +584,16 @@ impl From<Tag> for Vec<String> {
570
584
public_key,
571
585
identifier,
572
586
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
+ }
578
597
Tag :: Relay ( url) => vec ! [ TagKind :: Relay . to_string( ) , url. to_string( ) ] ,
579
598
Tag :: ContactList {
580
599
pk,
@@ -898,7 +917,7 @@ mod tests {
898
917
"a695f6b60119d9521934a691347d9f78e8770b56da16bb255ee286ddf9fda919"
899
918
) ?,
900
919
identifier: String :: from( "ipsum" ) ,
901
- relay_url: UncheckedUrl :: from ( "wss://relay.nostr.org" )
920
+ relay_url: Some ( UncheckedUrl :: from_str ( "wss://relay.nostr.org" ) ? )
902
921
}
903
922
. as_vec( )
904
923
) ;
@@ -1119,7 +1138,7 @@ mod tests {
1119
1138
"a695f6b60119d9521934a691347d9f78e8770b56da16bb255ee286ddf9fda919"
1120
1139
) ?,
1121
1140
identifier: String :: from( "ipsum" ) ,
1122
- relay_url: UncheckedUrl :: from ( "wss://relay.nostr.org" )
1141
+ relay_url: Some ( UncheckedUrl :: from_str ( "wss://relay.nostr.org" ) ? )
1123
1142
}
1124
1143
) ;
1125
1144
0 commit comments