conjure_core/ast/
name.rs

1use std::fmt::Display;
2
3use serde::{Deserialize, Serialize};
4
5/// A reference to an object stored in the [`SymbolTable`].
6#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
7pub enum Name {
8    /// A name given in the input model.
9    UserName(String),
10    /// A name generated by Conjure-Oxide.
11    MachineName(i32),
12}
13
14uniplate::derive_unplateable!(Name);
15
16impl Display for Name {
17    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18        match self {
19            Name::UserName(s) => write!(f, "{}", s),
20            Name::MachineName(i) => write!(f, "__{}", i),
21        }
22    }
23}
24
25impl From<String> for Name {
26    fn from(s: String) -> Self {
27        Name::UserName(s)
28    }
29}
30
31impl From<&str> for Name {
32    fn from(s: &str) -> Self {
33        Name::UserName(s.to_string())
34    }
35}
36
37impl From<i32> for Name {
38    fn from(i: i32) -> Self {
39        Name::MachineName(i)
40    }
41}