Skip to content
Snippets Groups Projects
optic_port.rs 2.37 KiB
Newer Older
Udo Eisenbarth's avatar
Udo Eisenbarth committed
#[derive(Debug, PartialEq, Clone)]
pub enum OpticPortDirection {
    Incoming,
    Outgoing,
}
impl OpticPortDirection {
    fn invert(self) -> OpticPortDirection {
        if self == OpticPortDirection::Incoming {
            OpticPortDirection::Outgoing
        } else {
            OpticPortDirection::Incoming
        }
    }
}
#[derive(Debug)]
pub struct OpticPort {
    name: String,
    direction: OpticPortDirection,
}

impl OpticPort {
    pub fn new(name: &str, direction: OpticPortDirection) -> Self {
        Self{ name: name.into(), direction: direction }
    }

    pub fn set_name(&mut self, name: &str) {
        self.name = name.into();
    }

    pub fn name(&self) -> &str {
        self.name.as_ref()
    }

    pub fn set_direction(&mut self, direction: OpticPortDirection) {
        self.direction = direction;
    }

    pub fn direction(&self) -> &OpticPortDirection {
        &self.direction
    }

    pub fn invert(&mut self) {
        self.direction = self.direction.clone().invert();
    }
}

#[cfg(test)]
mod test {
    use crate::optic_port::{OpticPort,OpticPortDirection};
    #[test]
    fn new() {
        let port = OpticPort::new("Test", OpticPortDirection::Incoming);
        assert_eq!(port.name, "Test");
        assert_eq!(port.direction, OpticPortDirection::Incoming);
    }
    #[test]
    fn set_name() {
        let mut port = OpticPort::new("Test", OpticPortDirection::Incoming);
        port.set_name("Test2");
        assert_eq!(port.name, "Test2");
        assert_eq!(port.direction, OpticPortDirection::Incoming);
    }
    #[test]
    fn name() {
        let port = OpticPort::new("Test", OpticPortDirection::Incoming);
        assert_eq!(port.name(), "Test");
    }
    #[test]
    fn set_direction() {
        let mut port = OpticPort::new("Test", OpticPortDirection::Incoming);
        port.set_direction(OpticPortDirection::Outgoing);
        assert_eq!(port.name, "Test");
        assert_eq!(port.direction, OpticPortDirection::Outgoing);
    }
    #[test]
    fn direction() {
        let port = OpticPort::new("Test", OpticPortDirection::Incoming);
        assert_eq!(port.direction(), &OpticPortDirection::Incoming);
    }
    #[test]
    fn invert() {
        let mut port = OpticPort::new("Test", OpticPortDirection::Incoming);
        port.invert();
        assert_eq!(port.direction, OpticPortDirection::Outgoing);
        assert_eq!(port.name, "Test");
    }
}