dasn1-notation 0.1.1

A compiler for the ASN.1 notation language
Documentation
use std::fmt;

use variation::Variation;

#[derive(Debug, Clone, Hash, PartialEq, Eq)]
pub struct Import {
    path: Vec<String>,
    visibility: Visibility,
}

impl Import {
    pub fn new(visibility: Visibility, path: Vec<String>) -> Self {
        Self { visibility, path }
    }
}

impl fmt::Display for Import {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(
            f,
            "{vis}use {path};",
            vis = self.visibility,
            path = self.path.join("::")
        )
    }
}

#[derive(Debug, Clone, Hash, PartialEq, Eq, Variation)]
pub enum Visibility {
    Public,
    Crate,
    Private,
}

impl fmt::Display for Visibility {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        let visibility = match self {
            Visibility::Public => "pub ",
            Visibility::Crate => "pub(crate) ",
            Visibility::Private => "",
        };

        visibility.fmt(f)
    }
}