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: KThe keyword that determines the type of this item.
kwd_str: &'a strA reference to the actual string that defines the keyword for this item.
args: &'a strReference 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> + use<'a, K>
pub(crate) fn args(&self) -> impl Iterator<Item = &'a str> + use<'a, K>
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.
Sourcepub(crate) fn text_within<'b>(&self, s: &'b str) -> Option<&'b str>
pub(crate) fn text_within<'b>(&self, s: &'b str) -> Option<&'b str>
Return the text of this item, if it originated within str,
from the start of its keyword up to and including its final newline.
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> UnsafeUnpin for Item<'a, K>where
K: UnsafeUnpin,
impl<'a, K> UnwindSafe for Item<'a, K>where
K: UnwindSafe,
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§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,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§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.Source§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.Source§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.Source§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.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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