use std::collections::HashMap;
use std::convert::TryFrom;
use crate::registry::{error::InvalidNodeError, Node};
#[derive(Debug, Clone, PartialEq, Serialize)]
pub struct NodeResponse<'a> {
pub identity: &'a str,
pub endpoints: &'a [String],
pub display_name: &'a str,
pub keys: &'a [String],
pub metadata: &'a HashMap<String, String>,
}
impl<'a> From<&'a Node> for NodeResponse<'a> {
fn from(node: &'a Node) -> Self {
Self {
identity: &node.identity,
endpoints: &node.endpoints,
display_name: &node.display_name,
keys: &node.keys,
metadata: &node.metadata,
}
}
}
#[derive(Debug, Serialize, Deserialize, PartialEq)]
pub struct NewNode {
pub identity: String,
pub endpoints: Vec<String>,
pub display_name: String,
pub keys: Vec<String>,
pub metadata: HashMap<String, String>,
}
impl TryFrom<NewNode> for Node {
type Error = InvalidNodeError;
fn try_from(node: NewNode) -> Result<Self, Self::Error> {
let mut builder = Node::builder(node.identity)
.with_endpoints(node.endpoints)
.with_display_name(node.display_name)
.with_keys(node.keys);
for (k, v) in node.metadata {
builder = builder.with_metadata(k, v);
}
builder.build()
}
}