Struct cedar_policy_core::parser::ASTNode
source · pub struct ASTNode<N> {
pub node: N,
pub info: SourceInfo,
}
Expand description
Metadata for our syntax trees
Fields§
§node: N
Main data represented
info: SourceInfo
additional information
Implementations§
source§impl ASTNode<Option<Policies>>
impl ASTNode<Option<Policies>>
sourcepub fn with_generated_policyids(
&self
) -> Option<impl Iterator<Item = (PolicyID, &ASTNode<Option<Policy>>)>>
pub fn with_generated_policyids( &self ) -> Option<impl Iterator<Item = (PolicyID, &ASTNode<Option<Policy>>)>>
Iterate over the Policy
nodes in this cst::Policies
, with
corresponding generated PolicyID
s
sourcepub fn to_policyset(&self, errs: &'_ mut Vec<ParseError>) -> Option<PolicySet>
pub fn to_policyset(&self, errs: &'_ mut Vec<ParseError>) -> Option<PolicySet>
convert cst::Policies
to ast::PolicySet
source§impl ASTNode<Option<Policy>>
impl ASTNode<Option<Policy>>
sourcepub fn to_policy_or_template(
&self,
id: PolicyID,
errs: &'_ mut Vec<ParseError>
) -> Option<Either<StaticPolicy, Template>>
pub fn to_policy_or_template( &self, id: PolicyID, errs: &'_ mut Vec<ParseError> ) -> Option<Either<StaticPolicy, Template>>
Convert cst::Policy
to an AST InlinePolicy
or Template
sourcepub fn to_policy(
&self,
id: PolicyID,
errs: &'_ mut Vec<ParseError>
) -> Option<StaticPolicy>
pub fn to_policy( &self, id: PolicyID, errs: &'_ mut Vec<ParseError> ) -> Option<StaticPolicy>
Convert cst::Policy
to an AST InlinePolicy
. (Will fail if the CST is for a template)
sourcepub fn to_policy_template(
&self,
id: PolicyID,
errs: &'_ mut Vec<ParseError>
) -> Option<Template>
pub fn to_policy_template( &self, id: PolicyID, errs: &'_ mut Vec<ParseError> ) -> Option<Template>
Convert cst::Policy
to ast::Template
. Works for inline policies as
well, which will become templates with 0 slots
source§impl ASTNode<Option<Annotation>>
impl ASTNode<Option<Annotation>>
sourcepub fn to_kv_pair(&self, errs: &'_ mut Vec<ParseError>) -> Option<(Id, SmolStr)>
pub fn to_kv_pair(&self, errs: &'_ mut Vec<ParseError>) -> Option<(Id, SmolStr)>
Get the (k, v) pair for the annotation. Critically, this checks validity for the strings and does unescaping
source§impl ASTNode<Option<Ident>>
impl ASTNode<Option<Ident>>
sourcepub fn to_valid_ident(&self, errs: &'_ mut Vec<ParseError>) -> Option<Id>
pub fn to_valid_ident(&self, errs: &'_ mut Vec<ParseError>) -> Option<Id>
Convert cst::Ident
to ast::Id
. Fails for reserved or invalid identifiers
source§impl ASTNode<Option<Primary>>
impl ASTNode<Option<Primary>>
sourcepub fn to_string_literal(
&self,
errs: &'_ mut Vec<ParseError>
) -> Option<SmolStr>
pub fn to_string_literal( &self, errs: &'_ mut Vec<ParseError> ) -> Option<SmolStr>
convert cst::Primary
representing a string literal to a SmolStr
.
Fails (and adds to errs
) if the Primary
wasn’t a string literal.
source§impl<N> ASTNode<N>
impl<N> ASTNode<N>
sourcepub fn from_source(node: N, info: SourceInfo) -> Self
pub fn from_source(node: N, info: SourceInfo) -> Self
Create a new Node from main data
sourcepub fn map<D>(self, f: impl FnOnce(N) -> D) -> ASTNode<D>
pub fn map<D>(self, f: impl FnOnce(N) -> D) -> ASTNode<D>
map the main data, leaving the SourceInfo alone
sourcepub fn into_inner(self) -> (N, SourceInfo)
pub fn into_inner(self) -> (N, SourceInfo)
consume the Node, producing the main data and the SourceInfo
source§impl<T> ASTNode<Option<T>>
impl<T> ASTNode<Option<T>>
Convenience methods on ASTNode<Option<T>>
sourcepub fn as_inner_pair(&self) -> (&SourceInfo, Option<&T>)
pub fn as_inner_pair(&self) -> (&SourceInfo, Option<&T>)
Similar to .as_inner()
, but also gives access to the SourceInfo
sourcepub fn collapse(&self) -> Option<ASTNode<&T>>
pub fn collapse(&self) -> Option<ASTNode<&T>>
None
if the node is empty, otherwise a node without the Option
sourcepub fn apply<F, R>(&self, f: F) -> Option<R>where
F: FnOnce(&T, &SourceInfo) -> Option<R>,
pub fn apply<F, R>(&self, f: F) -> Option<R>where F: FnOnce(&T, &SourceInfo) -> Option<R>,
Apply the function f
to the main data and source info. Returns None
if no main data or if f
returns None
.
sourcepub fn into_apply<F, R>(self, f: F) -> Option<R>where
F: FnOnce(T, SourceInfo) -> Option<R>,
pub fn into_apply<F, R>(self, f: F) -> Option<R>where F: FnOnce(T, SourceInfo) -> Option<R>,
Apply the function f
to the main data and source info, consuming them.
Returns None
if no main data or if f
returns None
.