Struct balena_temen::ast::Identifier
source · pub struct Identifier {
pub values: Vec<IdentifierValue>,
}
Expand description
An identifier
Examples
networks[0].name
| │ |
| | └ IdentifierValue::Name("name")
| |
| └ IdentifierValue::Index(0)
|
└ IdentifierValue::Name("networks")
persons[boss.id]["name"]
| │ |
| | └ IdentifierValue::Name("name")
| |
| └ IdentifierValue::Identifier(boss.id)
| | |
| | └ IdentifierValue::Name("id")
| |
| └ IdentifierValue::Name("boss")
|
└ IdentifierValue::Name("persons")
this.id
| |
| └ IdentifierValue::Name("id")
|
└ IdentifierValue::This
Fields
values: Vec<IdentifierValue>
List of identifier values (components)
Implementations
sourceimpl Identifier
impl Identifier
sourcepub fn new(values: Vec<IdentifierValue>) -> Identifier
pub fn new(values: Vec<IdentifierValue>) -> Identifier
sourcepub fn is_canonical(&self) -> bool
pub fn is_canonical(&self) -> bool
Check if an identifier is canonical
An identifier is considered as canonical if none relative identifier values
(IdentifierValue::This
, IdentifierValue::Super
) are present.
It affects (checks) nested identifiers as well.
Examples
Canonical identifiers.
use balena_temen::ast::*;
let identifier: Identifier = "names.wifi".parse().unwrap();
assert!(identifier.is_canonical());
let identifier: Identifier = "names.wifi[first].id".parse().unwrap();
assert!(identifier.is_canonical());
Not canonical identifiers.
use balena_temen::ast::*;
let identifier: Identifier = "names.this".parse().unwrap();
assert!(!identifier.is_canonical());
let identifier: Identifier = "names[this.index]".parse().unwrap();
assert!(!identifier.is_canonical());
sourcepub fn canonicalize(&self, position: &Identifier) -> Result<Identifier>
pub fn canonicalize(&self, position: &Identifier) -> Result<Identifier>
Returns the canonical, absolute, identifier with all intermediate components normalized and nested identifiers canonicalized.
Nested identifiers (IdentifierValue::Identifier
) are canonicalized
too.
Arguments
position
- An identifier position
Examples
use balena_temen::ast::*;
let identifier: Identifier = "names".parse().unwrap();
assert_eq!(identifier.canonicalize(&Identifier::default()).unwrap(), identifier);
let identifier: Identifier = "names.this.id.this.super".parse().unwrap();
let canonicalized: Identifier = "names".parse().unwrap();
assert_eq!(identifier.canonicalize(&Identifier::default()).unwrap(), canonicalized);
let identifier: Identifier = "super.id".parse().unwrap();
let position: Identifier = "wifi[`zrzka`].ssid".parse().unwrap();
let canonicalized: Identifier = "wifi[`zrzka`].id".parse().unwrap();
assert_eq!(identifier.canonicalize(&position).unwrap(), canonicalized);
sourcepub fn name<S>(self, name: S) -> Identifierwhere
S: Into<String>,
pub fn name<S>(self, name: S) -> Identifierwhere
S: Into<String>,
sourcepub fn index(self, index: isize) -> Identifier
pub fn index(self, index: isize) -> Identifier
Appends IdentifierValue::Index
to the identifier
Arguments
index
- An array index
use balena_temen::ast::*;
let identifier = Identifier::default()
.name("networks")
.index(0);
let parsed = "networks[0]".parse().unwrap();
assert_eq!(identifier, parsed);
sourcepub fn identifier(self, identifier: Identifier) -> Identifier
pub fn identifier(self, identifier: Identifier) -> Identifier
Appends IdentifierValue::Identifier
to the identifier
Arguments
identifier
- An identifier index
use balena_temen::ast::*;
let identifier = Identifier::default()
.name("wifi")
.identifier(Identifier::default().name("first_wifi_id"));
let parsed = "wifi[first_wifi_id]".parse().unwrap();
assert_eq!(identifier, parsed);
sourcepub fn pop(self) -> Result<Identifier>
pub fn pop(self) -> Result<Identifier>
Returns Identifier
with the last identifier value removed
Trait Implementations
sourceimpl Clone for Identifier
impl Clone for Identifier
sourcefn clone(&self) -> Identifier
fn clone(&self) -> Identifier
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresourceimpl Debug for Identifier
impl Debug for Identifier
sourceimpl Default for Identifier
impl Default for Identifier
sourcefn default() -> Identifier
fn default() -> Identifier
Creates new, empty, identifier
This identifier can be used to refer to the root.