mxmlextrema_as3parser/tree/
qualified_identifier.rs

1use crate::ns::*;
2use serde::{Serialize, Deserialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct QualifiedIdentifier {
6    pub location: Location,
7    pub attribute: bool,
8    pub qualifier: Option<Rc<Expression>>,
9    pub id: QualifiedIdentifierIdentifier,
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
13pub enum QualifiedIdentifierIdentifier {
14    Id((String, Location)),
15    Brackets(Rc<Expression>),
16}
17
18impl QualifiedIdentifier {
19    pub fn to_identifier_name_or_asterisk(&self) -> Option<(String, Location)> {
20        if self.attribute || self.qualifier.is_some() {
21            None
22        } else {
23            if let QualifiedIdentifierIdentifier::Id(id) = &self.id {
24                Some(id.clone())
25            } else {
26                None
27            }
28        }
29    }
30
31    pub fn to_identifier_name(&self) -> Option<(String, Location)> {
32        if self.attribute || self.qualifier.is_some() {
33            None
34        } else {
35            if let QualifiedIdentifierIdentifier::Id(id) = &self.id {
36                if id.0 == "*" { None } else { Some(id.clone()) }
37            } else {
38                None
39            }
40        }
41    }
42
43    pub fn is_identifier_token(&self) -> bool {
44        self.qualifier.is_none() && !self.attribute && match &self.id {
45            QualifiedIdentifierIdentifier::Id((id, _)) => id != "*",
46            _ => false,
47        }
48    }
49}