// Unique NodeID generator and identifier representation.

///|
pub(all) struct NodeID {
  value : String
} derive(Eq, Debug, Hash)

///|
pub impl Show for NodeID with fn output(self, logger) {
  logger.write_string(self.value)
}

///|
pub fn NodeID::new(val : String) -> NodeID {
  { value: val }
}

///|
let id_counter : Ref[Int] = { val: 1000 }

///|
pub fn NodeID::generate(prefix : String) -> NodeID {
  id_counter.val = id_counter.val + 1
  NodeID::new(prefix + "-" + id_counter.val.to_string())
}