nyar_wasm/symbols/identifiers/
mod.rs1use super::*;
2
3mod convert;
4mod display;
5
6#[derive(Clone, PartialEq, Eq, Ord, PartialOrd, Hash)]
7pub struct Identifier {
8 pub namespace: Vec<Arc<str>>,
10 pub name: Arc<str>,
12}
13
14impl Default for Identifier {
15 fn default() -> Self {
16 Self { namespace: Vec::new(), name: Arc::from("") }
17 }
18}
19
20impl Identifier {
21 pub fn is_anonymous(&self) -> bool {
23 self.name.is_empty()
24 }
25 pub(crate) fn wasi_name(&self) -> String {
26 self.name.as_ref().to_case(Case::Kebab)
27 }
28 pub(crate) fn wasi_id(&self) -> String {
29 encode_id(&format!("{self:#}"))
30 }
31}
32
33impl Identifier {
34 pub fn new<S>(name: S) -> Self
36 where
37 S: Into<Arc<str>>,
38 {
39 Self { namespace: Vec::new(), name: name.into() }
40 }
41 pub fn join<S>(&self, name: S) -> Self
43 where
44 S: Into<Arc<str>>,
45 {
46 match self.name.as_ref() {
47 "" => Self { namespace: self.namespace.clone(), name: name.into() },
48 _ => {
49 let mut namespace = self.namespace.clone();
50 namespace.push(self.name.clone());
51 Self { namespace, name: name.into() }
52 }
53 }
54 }
55}