lucetc 0.6.1

Fastly's WebAssembly to native code compiler
Documentation
use cranelift_codegen::ir::ExternalName;
use cranelift_module::{DataId, FuncId, FuncOrDataId};

#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Name {
    symbol: String,
    id: FuncOrDataId,
}

impl Name {
    pub fn new(symbol: String, id: FuncOrDataId) -> Self {
        Self {
            symbol: symbol,
            id: id,
        }
    }

    pub fn new_func(symbol: String, id: FuncId) -> Self {
        Self::new(symbol, FuncOrDataId::Func(id))
    }

    pub fn new_data(symbol: String, id: DataId) -> Self {
        Self::new(symbol, FuncOrDataId::Data(id))
    }

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

    pub fn as_funcid(&self) -> Option<FuncId> {
        match self.id {
            FuncOrDataId::Func(id) => Some(id),
            FuncOrDataId::Data(_) => None,
        }
    }

    pub fn as_dataid(&self) -> Option<DataId> {
        match self.id {
            FuncOrDataId::Data(id) => Some(id),
            FuncOrDataId::Func(_) => None,
        }
    }

    pub fn as_externalname(&self) -> ExternalName {
        ExternalName::from(self.id)
    }
}

impl From<Name> for ExternalName {
    fn from(name: Name) -> ExternalName {
        ExternalName::from(name.id)
    }
}