ckb-testkit 0.0.1

ckb testkit
use crate::Node;
use std::collections::hash_map::{Keys, Values};
use std::collections::HashMap;

pub struct Nodes {
    _inner: HashMap<String, Node>,
}

impl From<HashMap<String, Node>> for Nodes {
    fn from(nodes: HashMap<String, Node>) -> Self {
        Nodes { _inner: nodes }
    }
}

impl From<Vec<Node>> for Nodes {
    fn from(nodes: Vec<Node>) -> Self {
        nodes
            .into_iter()
            .map(|node| (node.node_name().to_string(), node))
            .collect::<HashMap<_, _>>()
            .into()
    }
}

impl From<Nodes> for HashMap<String, Node> {
    fn from(nodes: Nodes) -> Self {
        nodes._inner
    }
}

impl AsRef<HashMap<String, Node>> for Nodes {
    fn as_ref(&self) -> &HashMap<String, Node> {
        &self._inner
    }
}

impl Nodes {
    pub fn get_node(&self, node_name: &str) -> &Node {
        assert!(self._inner.contains_key(node_name));
        self._inner.get(node_name).expect("checked above")
    }

    pub fn get_node_mut(&mut self, node_name: &str) -> &mut Node {
        assert!(self._inner.contains_key(node_name));
        self._inner.get_mut(node_name).expect("checked above")
    }

    pub fn node_names(&self) -> Keys<String, Node> {
        self._inner.keys()
    }

    pub fn nodes(&self) -> Values<String, Node> {
        self._inner.values()
    }
}