Struct Item

Source
pub(crate) struct Item<'a, K: Keyword> {
    kwd: K,
    kwd_str: &'a str,
    args: &'a str,
    split_args: RefCell<Option<Vec<&'a str>>>,
    object: Option<Object<'a>>,
}
Expand description

A single part of a directory object.

Each Item – called an “entry” in dir-spec.txt – has a keyword, a (possibly empty) set of arguments, and an optional object.

This is a zero-copy implementation that points to slices within a containing string.

Fields§

§kwd: K

The keyword that determines the type of this item.

§kwd_str: &'a str

A reference to the actual string that defines the keyword for this item.

§args: &'a str

Reference to the arguments that appear in the same line after the keyword. Does not include the terminating newline or the space that separates the keyword for its arguments.

§split_args: RefCell<Option<Vec<&'a str>>>

The arguments, split by whitespace. This vector is constructed as needed, using interior mutability.

§object: Option<Object<'a>>

If present, a base-64-encoded object that appeared at the end of this item.

Implementations§

Source§

impl<'a, K: Keyword> Item<'a, K>

Source

pub(crate) fn kwd(&self) -> K

Return the parsed keyword part of this item.

Source

pub(crate) fn kwd_str(&self) -> &'a str

Return the keyword part of this item, as a string.

Source

pub(crate) fn has_kwd_in(&self, ks: &[K]) -> bool

Return true if the keyword for this item is in ‘ks’.

Source

pub(crate) fn args_as_str(&self) -> &'a str

Return the arguments of this item, as a single string.

Source

fn args_as_vec(&self) -> Ref<'_, Vec<&'a str>>

Return the arguments of this item as a vector.

Source

pub(crate) fn args(&self) -> impl Iterator<Item = &'a str>

Return an iterator over the arguments of this item.

Source

pub(crate) fn arg(&self, idx: usize) -> Option<&'a str>

Return the nth argument of this item, if there is one.

Source

pub(crate) fn required_arg(&self, idx: usize) -> Result<&'a str>

Return the nth argument of this item, or an error if it isn’t there.

Source

pub(crate) fn parse_optional_arg<V: FromStr>( &self, idx: usize, ) -> Result<Option<V>>
where Error: From<V::Err>,

Try to parse the nth argument (if it exists) into some type that supports FromStr.

Returns Ok(None) if the argument doesn’t exist.

Source

pub(crate) fn parse_arg<V: FromStr>(&self, idx: usize) -> Result<V>
where Error: From<V::Err>,

Try to parse the nth argument (if it exists) into some type that supports FromStr.

Return an error if the argument doesn’t exist.

Source

pub(crate) fn n_args(&self) -> usize

Return the number of arguments for this Item

Source

pub(crate) fn has_obj(&self) -> bool

Return true iff this Item has an associated object.

Source

pub(crate) fn obj_tag(&self) -> Option<&'a str>

Return the tag of this item’s associated object, if it has one.

Source

pub(crate) fn obj_raw(&self) -> Result<Option<(&'a str, Vec<u8>)>>

Try to decode the base64 contents of this Item’s associated object.

On success, return the object’s tag and decoded contents.

Source

pub(crate) fn obj(&self, want_tag: &str) -> Result<Vec<u8>>

Try to decode the base64 contents of this Item’s associated object, and make sure that its tag matches ‘want_tag’.

Source

pub(crate) fn parse_obj<V: FromBytes>(&self, want_tag: &str) -> Result<V>

Try to decode the base64 contents of this item’s associated object as a given type that implements FromBytes.

Source

pub(crate) fn pos(&self) -> Pos

Return the position of this item.

This position won’t be useful unless it is later contextualized with the containing string.

Source

pub(crate) fn offset_in(&self, s: &str) -> Option<usize>

Return the position of this Item in a string.

Returns None if this item doesn’t actually belong to the string.

Source

pub(crate) fn arg_pos(&self, n: usize) -> Pos

Return the position of the n’th argument of this item.

If this item does not have a n’th argument, return the position of the end of the final argument.

Source

fn last_arg_end_pos(&self) -> Pos

Return the position at the end of the last argument. (This will point to a newline.)

Source

pub(crate) fn end_pos(&self) -> Pos

Return the position of the end of this object. (This will point to a newline.)

Source

pub(crate) fn offset_after(&self, s: &str) -> Option<usize>

If this item occurs within s, return the byte offset immediately after the end of this item.

Trait Implementations§

Source§

impl<'a, K: Clone + Keyword> Clone for Item<'a, K>

Source§

fn clone(&self) -> Item<'a, K>

Returns a duplicate 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<'a, K: Debug + Keyword> Debug for Item<'a, K>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a, K> !Freeze for Item<'a, K>

§

impl<'a, K> !RefUnwindSafe for Item<'a, K>

§

impl<'a, K> Send for Item<'a, K>
where K: Send,

§

impl<'a, K> !Sync for Item<'a, K>

§

impl<'a, K> Unpin for Item<'a, K>
where K: Unpin,

§

impl<'a, K> UnwindSafe for Item<'a, K>
where K: UnwindSafe,

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
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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, dest: *mut u8)

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

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSend for T
where T: Any + Send,

§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

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

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Same for T

Source§

type Output = T

Should always be Self
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, 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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,