icentral-nodeid 0.1.0

A Rust library for management of node identifiers in distributed systems, providing interfaces for node ID range handling, mapping, and iteration.
Documentation
crate::ix!();

pub struct NodeIdRange {
    start: usize,
    len:   usize,
}

impl NodeIdRange {

    pub fn len(&self) -> usize {
        self.len
    }

    pub fn range(&self) -> std::ops::Range<NodeId> {
        std::ops::Range {
            start: nodeid![self.start],
            end:   nodeid![self.start + self.len]
        }
    }
}

impl IntoIterator for NodeIdRange {

    type Item     = NodeId;
    type IntoIter = std::vec::IntoIter<Self::Item>;

    fn into_iter(self) -> Self::IntoIter {

        let start = self.start;
        let end   = start + self.len;

        let vec: Vec<NodeId> = (start..end).map(|x| NodeId::from(x)).collect();

        vec.into_iter()
    }
}

impl NodeIdRange {

    pub fn new(start: usize, len: usize) -> Self {
        Self {
            start,
            len,
        }
    }
}