[][src]Struct bcder::oid::Oid

pub struct Oid<T: AsRef<[u8]> = Bytes>(pub T);

An object identifer.

Object identifiers are globally unique, hierarchical values that are used to identify objects or their type. When written, they are presented as a sequence of integers separated by dots such as ‘1.3.6.1.5.5.7.1’ or with the integers separated by white space and enclosed in curly braces such as ‘{ 1 3 6 1 5 5 7 1 }’. Individual integers or sequences of integers can also be given names which then are used instead of the integers.

Values of this type keep a single object identifer in its BER encoding, i.e., in some form of byte sequence. Because different representations may be useful, the type is actually generic over something that can become a reference to a bytes slice. Parsing is only defined for Bytes values, though.

The only use for object identifiers currently is to compare them to predefined values. For this purpose, you typically define your known object identifiers in a oid submodule as contants of Oid<&'static [u8]> – or its type alias ConstOid. This is also the reason why the wrapped value is pub for now. This will change once const fn is stable.

Unfortunately, there is currently no proc macro to generate the object identifier constants in the code. Instead, the crate ships with a mkoid binary which accepts object identifiers in ‘dot integer’ notation and produces the u8 array for their encoded value. You can install this binary via cargo install ber.

Methods

impl Oid<Bytes>[src]

pub fn skip_in<S: Source>(cons: &mut Constructed<S>) -> Result<(), S::Err>[src]

Skips over an object identifier value.

If the source has reached its end, if the next value does not have the Tag::OID, or if it is not a primitive value, returns a malformed error.

pub fn skip_opt_in<S: Source>(
    cons: &mut Constructed<S>
) -> Result<Option<()>, S::Err>
[src]

Skips over an optional object identifier value.

If the source has reached its end of if the next value does not have the Tag::OID, returns Ok(None). If the next value has the right tag but is not a primitive value, returns a malformed error.

pub fn take_from<S: Source>(
    constructed: &mut Constructed<S>
) -> Result<Self, S::Err>
[src]

Takes an object identifier value from the source.

If the source has reached its end, if the next value does not have the Tag::OID, or if it is not a primitive value, returns a malformed error.

pub fn take_opt_from<S: Source>(
    constructed: &mut Constructed<S>
) -> Result<Option<Self>, S::Err>
[src]

Takes an optional object identifier value from the source.

If the source has reached its end of if the next value does not have the Tag::OID, returns Ok(None). If the next value has the right tag but is not a primitive value, returns a malformed error.

impl<T: AsRef<[u8]>> Oid<T>[src]

pub fn skip_if<S: Source>(
    &self,
    constructed: &mut Constructed<S>
) -> Result<(), S::Err>
[src]

Skip over an object identifier if it matches self.

impl<T: AsRef<[u8]>> Oid<T>[src]

Important traits for Iter<'a>
pub fn iter(&self) -> Iter[src]

Returns an iterator to the components of this object identifiers.

Panics

The returned identifier will eventually panic if self does not contain a correctly encoded object identifier.

Trait Implementations

impl<T: AsRef<[u8]>> PrimitiveContent for Oid<T>[src]

fn to_encoded_bytes(&self, mode: Mode) -> Bytes[src]

Encodes the value to bytes (useful when you need to sign a structure)

fn encode(self) -> Primitive<Self>[src]

Returns a value encoder for this content using the natural tag. Read more

fn encode_as(self, tag: Tag) -> Primitive<Self>[src]

Returns a value encoder for this content using the given tag. Read more

fn encode_ref(&self) -> Primitive<&Self>[src]

Returns a value encoder for a reference using the natural tag.

fn encode_ref_as(&self, tag: Tag) -> Primitive<&Self>[src]

Returns a value encoder for a reference using the given tag.

impl<T: Clone + AsRef<[u8]>> Clone for Oid<T>[src]

fn clone_from(&mut self, source: &Self)
1.0.0
[src]

Performs copy-assignment from source. Read more

impl<T: AsRef<[u8]>> Eq for Oid<T>[src]

impl<T: AsRef<[u8]>, U: AsRef<[u8]>> PartialEq<Oid<U>> for Oid<T>[src]

#[must_use]
fn ne(&self, other: &Rhs) -> bool
1.0.0
[src]

This method tests for !=.

impl<T: AsRef<[u8]>> AsRef<[u8]> for Oid<T>[src]

impl<T: AsRef<[u8]>> Display for Oid<T>[src]

impl<T: AsRef<[u8]>> Hash for Oid<T>[src]

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

Feeds a slice of this type into the given [Hasher]. Read more

impl<T: Debug + AsRef<[u8]>> Debug for Oid<T>[src]

Auto Trait Implementations

impl<T> Send for Oid<T> where
    T: Send

impl<T> Sync for Oid<T> where
    T: Sync

Blanket Implementations

impl<T> From for T[src]

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom for T where
    U: Into<T>, 
[src]

type Error = !

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

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

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.