1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//! Module for Variability semantic analysis.

use melodium_common::descriptor::Variability as VariabilityDescriptor;
use std::fmt;

/// Enum for variability identification.
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
pub enum Variability {
    /// Variability is constant.
    Const,
    /// Variability is variable.
    Var,
}

impl Variability {
    pub fn from_string(text: &str) -> Option<Self> {
        match text {
            "const" => Some(Self::Const),
            "var" => Some(Self::Var),
            _ => None,
        }
    }

    pub fn to_descriptor(&self) -> VariabilityDescriptor {
        match self {
            Self::Const => VariabilityDescriptor::Const,
            Self::Var => VariabilityDescriptor::Var,
        }
    }
}

impl fmt::Display for Variability {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(
            f,
            "{}",
            match self {
                Variability::Const => "const",
                Variability::Var => "var",
            }
        )
    }
}