pub enum ToplevelDefinition {
    Type(ToplevelTypeDefinition),
    Value(ToplevelValueDefinition),
    Information(ToplevelInformationDefinition),
}
Expand description

Represents a top-level ASN.1 definition. The compiler distinguished three different variants of top-level definitions.

  • Type definitions define custom types based on ASN.1’s built-in types
  • Value definitions define values using custom ot built-in types
  • Information definitions define abstraction concepts introduced in ITU-T X.681

The linker and any [Backend] for this compiler consumes top-level definitions in order to generate bindings.

Variants§

Implementations§

source§

impl ToplevelDefinition

source

pub fn name(&self) -> &String

Returns the name of a top-level definition.

§Example
assert_eq!(
    ToplevelDefinition::Value(
        ToplevelValueDefinition {
            comments: String::from("Comments from the ASN.1 spec"),
            name: String::from("the-answer"),
            associated_type: String::from("INTEGER"),
            value: ASN1Value::Integer(42),
            index: None,
        }
    ).name(),
    &String::from("the-answer")
);
source§

impl ToplevelDefinition

source

pub fn is_class_with_name( &self, name: &String ) -> Option<&InformationObjectClass>

source

pub fn has_constraint_reference(&self) -> bool

Traverses a top-level declaration to check for references to other top-level declarations in a constraint. An example would be the constraint of the intercontinental field in the following example.

fifteen INTEGER = 15

Departures ::= SEQUENCE {
  local SEQUENCE (SIZE(0..999)) OF Local,
  continental SEQUENCE (SIZE(0..99)) OF Continental,
  intercontinental SEQUENCE (SIZE(0..fifteen)) OF Intercontinental
}

Traverses a top-level declaration to replace references to other top-level declarations in a constraint. An example would be the constraint of the intercontinental field in the following example.

fifteen INTEGER = 15

Departures ::= SEQUENCE {
  local SEQUENCE (SIZE(0..999)) OF Local,
  continental SEQUENCE (SIZE(0..99)) OF Continental,
  intercontinental SEQUENCE (SIZE(0..fifteen)) OF Intercontinental
}

The method handles linking of multiple constraint references within a top-level declaration.

§Params
  • tlds - vector of other top-level declarations that will be searched as the method resolves a reference returns true if the reference was resolved successfully.
source

pub fn collect_supertypes( &mut self, tlds: &BTreeMap<String, ToplevelDefinition> ) -> Result<(), GrammarError>

Collects supertypes of ASN1 values.

Trait Implementations§

source§

impl Clone for ToplevelDefinition

source§

fn clone(&self) -> ToplevelDefinition

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 ToplevelDefinition

source§

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

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

impl PartialEq for ToplevelDefinition

source§

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

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for ToplevelDefinition

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> 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> ToOwned for T
where T: Clone,

§

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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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.