cedar_policy_core::ast

Struct InternalName

Source
pub struct InternalName { /* private fields */ }
Expand description

Represents the name of an entity type, function, etc. The name may include namespaces. Clone is O(1).

This type may contain any name valid for use internally, including names with reserved __cedar components (and also names without __cedar).

Implementations§

Source§

impl InternalName

Source

pub fn new( basename: Id, path: impl IntoIterator<Item = Id>, loc: Option<Loc>, ) -> Self

A full constructor for InternalName

Source

pub fn unqualified_name(id: Id) -> Self

Create an InternalName with no path (no namespaces).

Source

pub fn __cedar() -> Self

Get the InternalName representing the reserved __cedar namespace

Source

pub fn parse_unqualified_name(s: &str) -> Result<Self, ParseErrors>

Create an InternalName with no path (no namespaces). Returns an error if s is not a valid identifier.

Source

pub fn type_in_namespace( basename: Id, namespace: InternalName, loc: Option<Loc>, ) -> InternalName

Given a type basename and a namespace (as an InternalName itself), return an InternalName representing the type’s fully qualified name

Source

pub fn loc(&self) -> Option<&Loc>

Get the source location

Source

pub fn basename(&self) -> &Id

Get the basename of the InternalName (ie, with namespaces stripped).

Source

pub fn namespace_components(&self) -> impl Iterator<Item = &Id>

Get the namespace of the InternalName, as components

Source

pub fn namespace(&self) -> String

Get the full namespace of the InternalName, as a single string.

Examples:

  • foo::bar –> the namespace is "foo"
  • bar –> the namespace is ""
  • foo::bar::baz –> the namespace is "foo::bar"
Source

pub fn qualify_with(&self, namespace: Option<&InternalName>) -> InternalName

Qualify the name with a namespace

If the name already has a non-empty namespace, this method does not apply any prefix and instead returns a copy of self.

If namespace is None, that represents the empty namespace, so no prefixing will be done.

If the name does not already have an explicit namespace (i.e., it’s just a single Id), this applies namespace as a prefix (if it is present).

Examples:

  • A::B.qualify_with(None) is A::B
  • A::B.qualify_with(Some(C)) is also A::B
  • A.qualify_with(None) is A
  • A.qualify_with(Some(C)) is C::A
  • A.qualify_with(Some(B::C)) is B::C::A
Source

pub fn qualify_with_name(&self, namespace: Option<&Name>) -> InternalName

Like qualify_with(), but accepts a Name as the namespace to qualify with

Source

pub fn is_unqualified(&self) -> bool

Test if an InternalName is an Id

Source

pub fn is_reserved(&self) -> bool

Test if an InternalName is reserved i.e., any of its components matches __cedar

Trait Implementations§

Source§

impl AsRef<InternalName> for Name

Source§

fn as_ref(&self) -> &InternalName

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Clone for InternalName

Source§

fn clone(&self) -> InternalName

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for InternalName

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for InternalName

Deserialize an InternalName using from_normalized_str. This deserialization implementation is used in the JSON schema format.

Source§

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for InternalName

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<Id> for InternalName

Source§

fn from(value: Id) -> Self

Converts to this type from the input type.
Source§

impl From<Name> for InternalName

Source§

fn from(value: Name) -> Self

Converts to this type from the input type.
Source§

impl FromNormalizedStr for InternalName

Source§

fn describe_self() -> &'static str

Short string description of the Self type, to be used in error messages. What are we trying to parse?
Source§

fn from_normalized_str(s: &str) -> Result<Self, ParseErrors>

Create a Self by parsing a string, which is required to be normalized. That is, the input is required to roundtrip with the Display impl on Self: Self::from_normalized_str(x).to_string() == x must hold. Read more
Source§

impl FromStr for InternalName

Source§

type Err = ParseErrors

The associated error which can be returned from parsing.
Source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
Source§

impl Hash for InternalName

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for InternalName

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for InternalName

PartialEq implementation ignores the loc.

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for InternalName

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Serialize for InternalName

Serialize an InternalName using its Display implementation This serialization implementation is used in the JSON schema format.

Source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<'a> TryFrom<&'a InternalName> for &'a Name

Source§

type Error = ReservedNameError

The type returned in the event of a conversion error.
Source§

fn try_from(value: &'a InternalName) -> Result<&'a Name, ReservedNameError>

Performs the conversion.
Source§

impl TryFrom<InternalName> for Id

Convert a InternalName to an Id The error type is the unit type because the reason the conversion fails is obvious

Source§

type Error = ()

The type returned in the event of a conversion error.
Source§

fn try_from(value: InternalName) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl TryFrom<InternalName> for Name

Source§

type Error = ReservedNameError

The type returned in the event of a conversion error.
Source§

fn try_from(value: InternalName) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl Eq for InternalName

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToSmolStr for T
where T: Display + ?Sized,

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,