dasn1-notation 0.1.1

A compiler for the ASN.1 notation language
Documentation
use failure::Fallible;

use super::{imports::Visibility, Backend, Rust};
use crate::parser::{Type, Value};

#[derive(Clone, Debug, Eq, Hash, PartialEq)]
pub struct Constant {
    visibility: Visibility,
    name: String,
    ty: Type,
    value: Value,
}

impl Constant {
    pub fn new(visibility: Visibility, name: String, ty: Type, value: Value) -> Self {
        Self {
            visibility,
            name,
            ty,
            value,
        }
    }

    pub fn generate(self, backend: &mut Rust) -> Fallible<String> {
        use heck::ShoutySnakeCase;

        Ok(format!(
            "{vis}const {name}: {ty} = {value};",
            vis = self.visibility,
            name = self.name.to_shouty_snake_case(),
            ty = backend.generate_type(&self.ty)?,
            value = backend.generate_value(&self.value)?,
        ))
    }
}