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: NMain data represented
info: SourceInfoadditional 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 PolicyIDs
sourcepub fn to_policyset(&self, errs: &mut ParseErrors) -> Option<PolicySet>
pub fn to_policyset(&self, errs: &mut ParseErrors) -> 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 ParseErrors
) -> Option<Either<StaticPolicy, Template>>
pub fn to_policy_or_template( &self, id: PolicyID, errs: &mut ParseErrors ) -> Option<Either<StaticPolicy, Template>>
Convert cst::Policy to an AST InlinePolicy or Template
sourcepub fn to_policy(
&self,
id: PolicyID,
errs: &mut ParseErrors
) -> Option<StaticPolicy>
pub fn to_policy( &self, id: PolicyID, errs: &mut ParseErrors ) -> 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 ParseErrors
) -> Option<Template>
pub fn to_policy_template( &self, id: PolicyID, errs: &mut ParseErrors ) -> 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 ParseErrors) -> Option<(Id, SmolStr)>
pub fn to_kv_pair(&self, errs: &mut ParseErrors) -> 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 ParseErrors) -> Option<Id>
pub fn to_valid_ident(&self, errs: &mut ParseErrors) -> Option<Id>
Convert cst::Ident to ast::Id. Fails for reserved or invalid identifiers
source§impl ASTNode<Option<Expr>>
impl ASTNode<Option<Expr>>
sourcepub fn to_expr(&self, errs: &mut ParseErrors) -> Option<Expr>
pub fn to_expr(&self, errs: &mut ParseErrors) -> Option<Expr>
convert cst::Expr to ast::Expr
source§impl ASTNode<Option<Primary>>
impl ASTNode<Option<Primary>>
sourcepub fn to_string_literal(&self, errs: &mut ParseErrors) -> Option<SmolStr>
pub fn to_string_literal(&self, errs: &mut ParseErrors) -> 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 ASTNode<Option<Ref>>
impl ASTNode<Option<Ref>>
sourcepub fn to_ref(&self, errs: &mut ParseErrors) -> Option<EntityUID>
pub fn to_ref(&self, errs: &mut ParseErrors) -> Option<EntityUID>
convert cst::Ref to ast::EntityUID
source§impl<N> ASTNode<N>
impl<N> ASTNode<N>
sourcepub fn from_source(info: impl Into<SourceInfo>, node: N) -> Self
pub fn from_source(info: impl Into<SourceInfo>, node: N) -> Self
Create a new Node from main data
sourcepub fn map<M>(self, f: impl FnOnce(N) -> M) -> ASTNode<M>
pub fn map<M>(self, f: impl FnOnce(N) -> M) -> ASTNode<M>
Transform the inner value while retaining the attached source info.
sourcepub fn into_inner(self) -> (N, SourceInfo)
pub fn into_inner(self) -> (N, SourceInfo)
Consume the ASTNode, yielding the node and attached source info.
source§impl<N> ASTNode<Option<N>>
impl<N> ASTNode<Option<N>>
Convenience methods on ASTNode<Option<N>>
sourcepub fn as_inner_pair(&self) -> (&SourceInfo, Option<&N>)
pub fn as_inner_pair(&self) -> (&SourceInfo, Option<&N>)
Similar to .as_inner(), but also gives access to the SourceInfo
sourcepub fn collapse(&self) -> Option<ASTNode<&N>>
pub fn collapse(&self) -> Option<ASTNode<&N>>
None if the node is empty, otherwise a node without the Option
sourcepub fn apply<F, R>(&self, f: F) -> Option<R>
pub fn apply<F, R>(&self, f: F) -> 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>
pub fn into_apply<F, R>(self, f: F) -> 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.
Trait Implementations§
source§impl<'de, N> Deserialize<'de> for ASTNode<N>where
N: Deserialize<'de>,
impl<'de, N> Deserialize<'de> for ASTNode<N>where
N: Deserialize<'de>,
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl<N: Diagnostic> Diagnostic for ASTNode<N>
impl<N: Diagnostic> Diagnostic for ASTNode<N>
source§fn code<'a>(&'a self) -> Option<Box<dyn Display + 'a>>
fn code<'a>(&'a self) -> Option<Box<dyn Display + 'a>>
Diagnostic. Ideally also globally unique, and documented
in the toplevel crate’s documentation for easy searching. Rust path
format (foo::bar::baz) is recommended, but more classic codes like
E0123 or enums will work just fine.source§fn severity(&self) -> Option<Severity>
fn severity(&self) -> Option<Severity>
ReportHandlers to change the display format
of this diagnostic. Read moresource§fn help<'a>(&'a self) -> Option<Box<dyn Display + 'a>>
fn help<'a>(&'a self) -> Option<Box<dyn Display + 'a>>
Diagnostic. Do you have any
advice for the poor soul who’s just run into this issue?source§fn url<'a>(&'a self) -> Option<Box<dyn Display + 'a>>
fn url<'a>(&'a self) -> Option<Box<dyn Display + 'a>>
Diagnostic.source§fn source_code(&self) -> Option<&dyn SourceCode>
fn source_code(&self) -> Option<&dyn SourceCode>
Diagnostic’s Diagnostic::labels to.source§fn labels(&self) -> Option<Box<dyn Iterator<Item = LabeledSpan> + '_>>
fn labels(&self) -> Option<Box<dyn Iterator<Item = LabeledSpan> + '_>>
Diagnostic’s Diagnostic::source_codeDiagnostics.