]> git.bitcoin.ninja Git - rust-lightning/commitdiff
Implement to and from for PublicKey and NodeId
authorbenthecarman <benthecarman@live.com>
Thu, 13 Apr 2023 00:14:03 +0000 (19:14 -0500)
committerbenthecarman <benthecarman@live.com>
Thu, 13 Apr 2023 17:59:42 +0000 (12:59 -0500)
lightning/src/routing/gossip.rs

index 892d1b40a962ca9f2f6d80fd840eb4fd164637cc..4f5b4f202c1c08dc7f3d1e534e46ce5b1be167d5 100644 (file)
@@ -38,6 +38,7 @@ use crate::io;
 use crate::io_extras::{copy, sink};
 use crate::prelude::*;
 use core::{cmp, fmt};
+use core::convert::TryFrom;
 use crate::sync::{RwLock, RwLockReadGuard};
 #[cfg(feature = "std")]
 use core::sync::atomic::{AtomicUsize, Ordering};
@@ -76,6 +77,11 @@ impl NodeId {
        pub fn as_slice(&self) -> &[u8] {
                &self.0
        }
+
+       /// Get the public key from this NodeId
+       pub fn as_pubkey(&self) -> Result<PublicKey, secp256k1::Error> {
+               PublicKey::from_slice(&self.0)
+       }
 }
 
 impl fmt::Debug for NodeId {
@@ -130,6 +136,20 @@ impl Readable for NodeId {
        }
 }
 
+impl From<PublicKey> for NodeId {
+       fn from(pubkey: PublicKey) -> Self {
+               Self::from_pubkey(&pubkey)
+       }
+}
+
+impl TryFrom<NodeId> for PublicKey {
+       type Error = secp256k1::Error;
+
+       fn try_from(node_id: NodeId) -> Result<Self, Self::Error> {
+               node_id.as_pubkey()
+       }
+}
+
 /// Represents the network as nodes and channels between them
 pub struct NetworkGraph<L: Deref> where L::Target: Logger {
        secp_ctx: Secp256k1<secp256k1::VerifyOnly>,