1#[derive(Debug, PartialEq, PartialOrd, Clone)]
3#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4pub enum Path {
5 Named(String),
7 Index(usize),
9}
10
11impl From<String> for Path {
12 fn from(value: String) -> Self {
13 Self::Named(value)
14 }
15}
16
17impl From<&str> for Path {
18 fn from(value: &str) -> Self {
19 Self::Named(value.to_owned())
20 }
21}
22
23impl From<usize> for Path {
24 fn from(value: usize) -> Self {
25 Self::Index(value)
26 }
27}
28
29#[derive(Debug, PartialEq, PartialOrd, Clone, Copy)]
31#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
32#[repr(u8)]
33pub enum Target {
34 Register,
36 ForeachItem,
38 ForeachIndex,
40 Range,
42}
43
44#[derive(Debug, PartialEq, PartialOrd, Clone)]
46#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
47pub enum Variable<T> {
48 Constant(T),
50
51 Reference {
52 path: Path,
53 target: Target,
54 },
55}
56
57impl<T> From<T> for Variable<T> {
58 fn from(value: T) -> Self {
59 Self::Constant(value)
60 }
61}
62
63impl<T> Default for Variable<T>
64where
65 T: Default,
66{
67 fn default() -> Self {
68 Self::Constant(T::default())
69 }
70}