ddmw_client/types/
node.rs

1//! Types that are used to describe server properties.
2
3pub mod ddlnk;
4
5use std::fmt;
6use std::str::FromStr;
7
8use crate::err::Error;
9
10
11/// Denote whether a node is on the sender or receiver side of the hardware
12/// data diode.
13#[derive(Debug, PartialEq)]
14pub enum Type {
15  /// Sending node.
16  Sender,
17
18  /// Receiving node.
19  Receiver
20}
21
22impl fmt::Display for Type {
23  fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
24    let s = match self {
25      Type::Sender => "sender",
26      Type::Receiver => "receiver"
27    };
28    write!(f, "{}", s)
29  }
30}
31
32impl FromStr for Type {
33  type Err = Error;
34
35  fn from_str(s: &str) -> Result<Self, Self::Err> {
36    match s {
37      "sender" => Ok(Type::Sender),
38      "receiver" => Ok(Type::Receiver),
39      _ => Err(Error::BadInput(format!("Unknown server::Type '{}'", s)))
40    }
41  }
42}
43
44
45#[cfg(test)]
46mod tests {
47  use super::*;
48
49  #[test]
50  fn type_to_string() {
51    let t = Type::Sender;
52    let s = format!("{}", t);
53    assert_eq!(s, "sender");
54
55    let t = Type::Receiver;
56    let s = format!("{}", t);
57    assert_eq!(s, "receiver");
58  }
59
60  #[test]
61  fn string_to_type() {
62    let t = "sender".parse::<Type>().unwrap();
63    assert_eq!(t, Type::Sender);
64
65    let t = "receiver".parse::<Type>().unwrap();
66    assert_eq!(t, Type::Receiver);
67  }
68}
69
70// vim: set ft=rust et sw=2 ts=2 sts=2 cinoptions=2 tw=79 :