Skip to main content

melodium_lang/semantic/
variability.rs

1//! Module for Variability semantic analysis.
2
3use melodium_common::descriptor::Variability as VariabilityDescriptor;
4use std::fmt;
5
6/// Enum for variability identification.
7#[derive(Copy, Clone, PartialEq, Eq, Debug)]
8pub enum Variability {
9    /// Variability is constant.
10    Const,
11    /// Variability is variable.
12    Var,
13}
14
15impl Variability {
16    pub fn from_string(text: &str) -> Option<Self> {
17        match text {
18            "const" => Some(Self::Const),
19            "var" => Some(Self::Var),
20            _ => None,
21        }
22    }
23
24    pub fn to_descriptor(&self) -> VariabilityDescriptor {
25        match self {
26            Self::Const => VariabilityDescriptor::Const,
27            Self::Var => VariabilityDescriptor::Var,
28        }
29    }
30}
31
32impl fmt::Display for Variability {
33    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
34        write!(
35            f,
36            "{}",
37            match self {
38                Variability::Const => "const",
39                Variability::Var => "var",
40            }
41        )
42    }
43}