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>
impl<'a, K: Keyword> Item<'a, K>
Sourcepub(crate) fn has_kwd_in(&self, ks: &[K]) -> bool
pub(crate) fn has_kwd_in(&self, ks: &[K]) -> bool
Return true if the keyword for this item is in ‘ks’.
Sourcepub(crate) fn args_as_str(&self) -> &'a str
pub(crate) fn args_as_str(&self) -> &'a str
Return the arguments of this item, as a single string.
Sourcefn args_as_vec(&self) -> Ref<'_, Vec<&'a str>>
fn args_as_vec(&self) -> Ref<'_, Vec<&'a str>>
Return the arguments of this item as a vector.
Sourcepub(crate) fn args(&self) -> impl Iterator<Item = &'a str>
pub(crate) fn args(&self) -> impl Iterator<Item = &'a str>
Return an iterator over the arguments of this item.
Sourcepub(crate) fn arg(&self, idx: usize) -> Option<&'a str>
pub(crate) fn arg(&self, idx: usize) -> Option<&'a str>
Return the nth argument of this item, if there is one.
Sourcepub(crate) fn required_arg(&self, idx: usize) -> Result<&'a str>
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.
Sourcepub(crate) fn parse_optional_arg<V: FromStr>(
&self,
idx: usize,
) -> Result<Option<V>>
pub(crate) fn parse_optional_arg<V: FromStr>( &self, idx: usize, ) -> Result<Option<V>>
Try to parse the nth argument (if it exists) into some type that supports FromStr.
Returns Ok(None) if the argument doesn’t exist.
Sourcepub(crate) fn parse_arg<V: FromStr>(&self, idx: usize) -> Result<V>
pub(crate) fn parse_arg<V: FromStr>(&self, idx: usize) -> Result<V>
Try to parse the nth argument (if it exists) into some type that supports FromStr.
Return an error if the argument doesn’t exist.
Sourcepub(crate) fn obj_tag(&self) -> Option<&'a str>
pub(crate) fn obj_tag(&self) -> Option<&'a str>
Return the tag of this item’s associated object, if it has one.
Sourcepub(crate) fn obj_raw(&self) -> Result<Option<(&'a str, Vec<u8>)>>
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.
Sourcepub(crate) fn obj(&self, want_tag: &str) -> Result<Vec<u8>>
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’.
Sourcepub(crate) fn parse_obj<V: FromBytes>(&self, want_tag: &str) -> Result<V>
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.
Sourcepub(crate) fn pos(&self) -> Pos
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.
Sourcepub(crate) fn offset_in(&self, s: &str) -> Option<usize>
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.
Sourcepub(crate) fn arg_pos(&self, n: usize) -> Pos
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.
Sourcefn last_arg_end_pos(&self) -> Pos
fn last_arg_end_pos(&self) -> Pos
Return the position at the end of the last argument. (This will point to a newline.)
Sourcepub(crate) fn end_pos(&self) -> Pos
pub(crate) fn end_pos(&self) -> Pos
Return the position of the end of this object. (This will point to a newline.)
Sourcepub(crate) fn offset_after(&self, s: &str) -> Option<usize>
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§
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§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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
impl<T> DowncastSend for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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