conjure_core/ast/
name.rs
1use std::fmt::Display;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
7pub enum Name {
8 UserName(String),
10 MachineName(i32),
12
13 RepresentedName(
15 Box<Name>,
17 String,
19 String,
21 ),
22
23 WithRepresentation(
24 Box<Name>,
25 Vec<String>,
27 ),
28}
29
30uniplate::derive_unplateable!(Name);
31
32impl Display for Name {
33 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34 match self {
35 Name::UserName(s) => write!(f, "{}", s),
36 Name::MachineName(i) => write!(f, "__{}", i),
37 Name::RepresentedName(name, rule_string, suffix) => {
38 write!(f, "{name}#{rule_string}_{suffix}")
39 }
40 Name::WithRepresentation(name, items) => {
41 write!(f, "{name}#{}", items.join("#"))
43 }
44 }
45 }
46}
47
48impl From<String> for Name {
49 fn from(s: String) -> Self {
50 Name::UserName(s)
51 }
52}
53
54impl From<&str> for Name {
55 fn from(s: &str) -> Self {
56 Name::UserName(s.to_string())
57 }
58}
59
60impl From<i32> for Name {
61 fn from(i: i32) -> Self {
62 Name::MachineName(i)
63 }
64}