Skip to main content

Index

Trait Index 

1.0.0 (const: unstable) · Source
pub trait Index<Idx>
where Idx: ?Sized,
{ type Output: ?Sized; // Required method fn index(&self, index: Idx) -> &Self::Output; }
Expand description

Used for indexing operations (container[index]) in immutable contexts.

container[index] is actually syntactic sugar for *container.index(index), but only when used as an immutable value. If a mutable value is requested, IndexMut is used instead. This allows nice things such as let value = v[index] if the type of value implements Copy.

§Examples

The following example implements Index on a read-only NucleotideCount container, enabling individual counts to be retrieved with index syntax.

use std::ops::Index;

enum Nucleotide {
    A,
    C,
    G,
    T,
}

struct NucleotideCount {
    a: usize,
    c: usize,
    g: usize,
    t: usize,
}

impl Index<Nucleotide> for NucleotideCount {
    type Output = usize;

    fn index(&self, nucleotide: Nucleotide) -> &Self::Output {
        match nucleotide {
            Nucleotide::A => &self.a,
            Nucleotide::C => &self.c,
            Nucleotide::G => &self.g,
            Nucleotide::T => &self.t,
        }
    }
}

let nucleotide_count = NucleotideCount {a: 14, c: 9, g: 10, t: 12};
assert_eq!(nucleotide_count[Nucleotide::A], 14);
assert_eq!(nucleotide_count[Nucleotide::C], 9);
assert_eq!(nucleotide_count[Nucleotide::G], 10);
assert_eq!(nucleotide_count[Nucleotide::T], 12);

Required Associated Types§

1.0.0 · Source

type Output: ?Sized

The returned type after indexing.

Required Methods§

1.0.0 · Source

fn index(&self, index: Idx) -> &Self::Output

Performs the indexing (container[index]) operation.

§Panics

May panic if the index is out of bounds.

Implementors§

Source§

impl Index<usize> for ByteString

§

impl Index<usize> for BStr

§

type Output = u8

§

impl Index<usize> for ByteRecord

§

type Output = [u8]

§

impl Index<usize> for Bytes

§

type Output = u8

§

impl Index<usize> for FixedBitSet

Return true if the bit is enabled in the bitset, or false otherwise.

Note: bits outside the capacity are always disabled, and thus indexing a FixedBitSet will not panic.

§

type Output = bool

§

impl Index<usize> for StringRecord

§

type Output = str

Source§

impl Index<Range<Position>> for Url

§

impl Index<Range<usize>> for UninitSlice

Source§

impl Index<Range<usize>> for ByteString

§

impl Index<Range<usize>> for ArcStr

§

type Output = str

§

impl Index<Range<usize>> for Substr

§

type Output = str

§

impl Index<Range<usize>> for BStr

§

type Output = BStr

§

impl Index<Range<usize>> for Bytes

§

type Output = Bytes

Source§

impl Index<RangeFrom<Position>> for Url

§

impl Index<RangeFrom<usize>> for UninitSlice

Source§

impl Index<RangeFrom<usize>> for ByteString

§

impl Index<RangeFrom<usize>> for ArcStr

§

type Output = str

§

impl Index<RangeFrom<usize>> for Substr

§

type Output = str

1.47.0 · Source§

impl Index<RangeFrom<usize>> for CStr

§

impl Index<RangeFrom<usize>> for BStr

§

type Output = BStr

§

impl Index<RangeFrom<usize>> for Bytes

§

type Output = Bytes

§

impl Index<RangeFull> for UninitSlice

Source§

impl Index<RangeFull> for ByteString

1.7.0 · Source§

impl Index<RangeFull> for CString

§

impl Index<RangeFull> for ArcStr

§

type Output = str

§

impl Index<RangeFull> for Substr

§

type Output = str

1.0.0 · Source§

impl Index<RangeFull> for OsString

Source§

impl Index<RangeFull> for Url

§

impl Index<RangeFull> for BStr

§

type Output = BStr

§

impl Index<RangeFull> for Bytes

§

type Output = Bytes

§

impl Index<RangeInclusive<usize>> for UninitSlice

Source§

impl Index<RangeInclusive<usize>> for ByteString

§

impl Index<RangeInclusive<usize>> for ArcStr

§

type Output = str

§

impl Index<RangeInclusive<usize>> for Substr

§

type Output = str

§

impl Index<RangeInclusive<usize>> for BStr

§

type Output = BStr

§

impl Index<RangeInclusive<usize>> for Bytes

§

type Output = Bytes

Source§

impl Index<RangeTo<Position>> for Url

§

impl Index<RangeTo<usize>> for UninitSlice

Source§

impl Index<RangeTo<usize>> for ByteString

§

impl Index<RangeTo<usize>> for ArcStr

§

type Output = str

§

impl Index<RangeTo<usize>> for Substr

§

type Output = str

§

impl Index<RangeTo<usize>> for BStr

§

type Output = BStr

§

impl Index<RangeTo<usize>> for Bytes

§

type Output = Bytes

§

impl Index<RangeToInclusive<usize>> for UninitSlice

Source§

impl Index<RangeToInclusive<usize>> for ByteString

§

impl Index<RangeToInclusive<usize>> for ArcStr

§

type Output = str

§

impl Index<RangeToInclusive<usize>> for Substr

§

type Output = str

§

impl Index<RangeToInclusive<usize>> for BStr

§

type Output = BStr

§

impl Index<RangeToInclusive<usize>> for Bytes

§

type Output = Bytes

§

impl Index<Span> for str

§

type Output = str

§

impl Index<Span> for str

§

type Output = str

§

impl Index<Span> for [u8]

§

type Output = [u8]

§

impl Index<Span> for [u8]

§

type Output = [u8]

§

impl<'a> Index<usize> for BerObject<'a>

§

type Output = BerObject<'a>

§

impl<'a> Index<usize> for InputPair<'a>

§

type Output = u8

§

impl<'a, T> Index<usize> for AllocatedStackMemory<'a, T>

§

type Output = T

§

impl<'a, T> Index<usize> for HeapPrealloc<'a, T>
where T: 'a,

§

type Output = [T]

§

impl<'a, T> Index<Range<usize>> for AllocatedStackMemory<'a, T>

§

type Output = [T]

§

impl<'h> Index<usize> for rama::utils::thirdparty::regex::bytes::Captures<'h>

Get a matching capture group’s haystack substring by index.

The haystack substring returned can’t outlive the Captures object if this method is used, because of how Index is defined (normally a[i] is part of a and can’t outlive it). To work around this limitation, do that, use Captures::get instead.

'h is the lifetime of the matched haystack, but the lifetime of the &str returned by this implementation is the lifetime of the Captures value itself.

§Panics

If there is no matching group at the given index.

§

type Output = [u8]

§

impl<'h> Index<usize> for rama::utils::thirdparty::regex::Captures<'h>

Get a matching capture group’s haystack substring by index.

The haystack substring returned can’t outlive the Captures object if this method is used, because of how Index is defined (normally a[i] is part of a and can’t outlive it). To work around this limitation, do that, use Captures::get instead.

'h is the lifetime of the matched haystack, but the lifetime of the &str returned by this implementation is the lifetime of the Captures value itself.

§Panics

If there is no matching group at the given index.

§

type Output = str

§

impl<'h, 'n> Index<&'n str> for rama::utils::thirdparty::regex::bytes::Captures<'h>

Get a matching capture group’s haystack substring by name.

The haystack substring returned can’t outlive the Captures object if this method is used, because of how Index is defined (normally a[i] is part of a and can’t outlive it). To work around this limitation, do that, use Captures::name instead.

'h is the lifetime of the matched haystack, but the lifetime of the &str returned by this implementation is the lifetime of the Captures value itself.

'n is the lifetime of the group name used to index the Captures value.

§Panics

If there is no matching group at the given name.

§

type Output = [u8]

§

impl<'h, 'n> Index<&'n str> for rama::utils::thirdparty::regex::Captures<'h>

Get a matching capture group’s haystack substring by name.

The haystack substring returned can’t outlive the Captures object if this method is used, because of how Index is defined (normally a[i] is part of a and can’t outlive it). To work around this limitation, do that, use Captures::name instead.

'h is the lifetime of the matched haystack, but the lifetime of the &str returned by this implementation is the lifetime of the Captures value itself.

'n is the lifetime of the group name used to index the Captures value.

§Panics

If there is no matching group at the given name.

§

type Output = str

§

impl<'s> Index<&'s str> for DocumentMut

§

type Output = Item

§

impl<'s> Index<&'s str> for InlineTable

§

type Output = Value

§

impl<'s> Index<&'s str> for Table

§

type Output = Item

§

impl<'s, T, I> Index<I> for SliceVec<'s, T>
where I: SliceIndex<[T]>,

§

type Output = <I as SliceIndex<[T]>>::Output

§

impl<A, I> Index<I> for SmallVec<A>
where A: Array, I: SliceIndex<[<A as Array>::Item]>,

§

type Output = <I as SliceIndex<[<A as Array>::Item]>>::Output

§

impl<A, I> Index<I> for ArrayVec<A>
where A: Array, I: SliceIndex<[<A as Array>::Item]>,

§

type Output = <I as SliceIndex<[<A as Array>::Item]>>::Output

§

impl<A, I> Index<I> for TinyVec<A>
where A: Array, I: SliceIndex<[<A as Array>::Item]>,

§

type Output = <I as SliceIndex<[<A as Array>::Item]>>::Output

§

impl<AllocU32> Index<BucketPopIndex> for EntropyBucketPopulation<AllocU32>
where AllocU32: Allocator<u32>,

§

type Output = u32

Source§

impl<G, I> Index<I> for Frozen<'_, G>
where G: Index<I>,

Source§

type Output = <G as Index<I>>::Output

Source§

impl<I> Index<I> for Value
where I: Index,

1.0.0 (const: unstable) · Source§

impl<I> Index<I> for str
where I: SliceIndex<str>,

Source§

impl<I> Index<I> for ByteStr
where I: SliceIndex<ByteStr>,

1.0.0 · Source§

impl<I> Index<I> for String
where I: SliceIndex<str>,

§

impl<I> Index<I> for Item
where I: Index,

§

type Output = Item

Source§

impl<I, T, const N: usize> Index<I> for Simd<T, N>

1.0.0 · Source§

impl<K, Q, V, A> Index<&Q> for BTreeMap<K, V, A>
where A: Allocator + Clone, K: Borrow<Q> + Ord, Q: Ord + ?Sized,

§

impl<K, Q, V, S> Index<&Q> for AHashMap<K, V, S>
where K: Eq + Hash + Borrow<Q>, Q: Eq + Hash + ?Sized, S: BuildHasher,

§

type Output = V

1.0.0 · Source§

impl<K, Q, V, S, A> Index<&Q> for rama::crypto::dep::x509_parser::prelude::asn1_rs::nom::lib::std::collections::HashMap<K, V, S, A>
where K: Eq + Hash + Borrow<Q>, Q: Eq + Hash + ?Sized, S: BuildHasher, A: Allocator,

§

impl<K, Q, V, S, A> Index<&Q> for HashMap<K, V, S, A>
where K: Eq + Hash, Q: Hash + Equivalent<K> + ?Sized, S: BuildHasher, A: Allocator,

§

type Output = V

§

impl<K, Q, V, S, A> Index<&Q> for HashMap<K, V, S, A>
where K: Eq + Hash, Q: Hash + Equivalent<K> + ?Sized, S: BuildHasher, A: Allocator,

§

type Output = V

§

impl<K, T> Index<K> for HeaderMap<T>
where K: AsHeaderName,

§

type Output = T

§

impl<K, V> Index<(Bound<usize>, Bound<usize>)> for Slice<K, V>

§

type Output = Slice<K, V>

§

impl<K, V> Index<usize> for Keys<'_, K, V>

Access [IndexMap] keys at indexed positions.

While Index<usize> for IndexMap accesses a map’s values, indexing through [IndexMap::keys] offers an alternative to access a map’s keys instead.

Since Keys is also an iterator, consuming items from the iterator will offset the effective indices. Similarly, if Keys is obtained from [Slice::keys], indices will be interpreted relative to the position of that slice.

§Examples

use indexmap::IndexMap;

let mut map = IndexMap::new();
for word in "Lorem ipsum dolor sit amet".split_whitespace() {
    map.insert(word.to_lowercase(), word.to_uppercase());
}

assert_eq!(map[0], "LOREM");
assert_eq!(map.keys()[0], "lorem");
assert_eq!(map[1], "IPSUM");
assert_eq!(map.keys()[1], "ipsum");

map.reverse();
assert_eq!(map.keys()[0], "amet");
assert_eq!(map.keys()[1], "sit");

map.sort_keys();
assert_eq!(map.keys()[0], "amet");
assert_eq!(map.keys()[1], "dolor");

// Advancing the iterator will offset the indexing
let mut keys = map.keys();
assert_eq!(keys[0], "amet");
assert_eq!(keys.next().map(|s| &**s), Some("amet"));
assert_eq!(keys[0], "dolor");
assert_eq!(keys[1], "ipsum");

// Slices may have an offset as well
let slice = &map[2..];
assert_eq!(slice[0], "IPSUM");
assert_eq!(slice.keys()[0], "ipsum");
use indexmap::IndexMap;

let mut map = IndexMap::new();
map.insert("foo", 1);
println!("{:?}", map.keys()[10]); // panics!
§

type Output = K

§

impl<K, V> Index<usize> for Slice<K, V>

§

type Output = V

§

impl<K, V> Index<Range<usize>> for Slice<K, V>

§

type Output = Slice<K, V>

§

impl<K, V> Index<RangeFrom<usize>> for Slice<K, V>

§

type Output = Slice<K, V>

§

impl<K, V> Index<RangeFull> for Slice<K, V>

§

type Output = Slice<K, V>

§

impl<K, V> Index<RangeInclusive<usize>> for Slice<K, V>

§

type Output = Slice<K, V>

§

impl<K, V> Index<RangeTo<usize>> for Slice<K, V>

§

type Output = Slice<K, V>

§

impl<K, V> Index<RangeToInclusive<usize>> for Slice<K, V>

§

type Output = Slice<K, V>

§

impl<K, V, Q, S> Index<&Q> for IndexMap<K, V, S>
where Q: Hash + Equivalent<K> + ?Sized, S: BuildHasher,

Access [IndexMap] values corresponding to a key.

§Examples

use indexmap::IndexMap;

let mut map = IndexMap::new();
for word in "Lorem ipsum dolor sit amet".split_whitespace() {
    map.insert(word.to_lowercase(), word.to_uppercase());
}
assert_eq!(map["lorem"], "LOREM");
assert_eq!(map["ipsum"], "IPSUM");
use indexmap::IndexMap;

let mut map = IndexMap::new();
map.insert("foo", 1);
println!("{:?}", map["bar"]); // panics!
§

type Output = V

§

impl<K, V, S> Index<(Bound<usize>, Bound<usize>)> for IndexMap<K, V, S>

§

type Output = Slice<K, V>

§

impl<K, V, S> Index<&K> for LiteMap<K, V, S>
where K: Ord, S: Store<K, V>,

§

type Output = V

§

impl<K, V, S> Index<usize> for IndexMap<K, V, S>

Access [IndexMap] values at indexed positions.

See Index<usize> for Keys to access a map’s keys instead.

§Examples

use indexmap::IndexMap;

let mut map = IndexMap::new();
for word in "Lorem ipsum dolor sit amet".split_whitespace() {
    map.insert(word.to_lowercase(), word.to_uppercase());
}
assert_eq!(map[0], "LOREM");
assert_eq!(map[1], "IPSUM");
map.reverse();
assert_eq!(map[0], "AMET");
assert_eq!(map[1], "SIT");
map.sort_keys();
assert_eq!(map[0], "AMET");
assert_eq!(map[1], "DOLOR");
use indexmap::IndexMap;

let mut map = IndexMap::new();
map.insert("foo", 1);
println!("{:?}", map[10]); // panics!
§

type Output = V

§

impl<K, V, S> Index<Range<usize>> for IndexMap<K, V, S>

§

type Output = Slice<K, V>

§

impl<K, V, S> Index<RangeFrom<usize>> for IndexMap<K, V, S>

§

type Output = Slice<K, V>

§

impl<K, V, S> Index<RangeFull> for IndexMap<K, V, S>

§

type Output = Slice<K, V>

§

impl<K, V, S> Index<RangeInclusive<usize>> for IndexMap<K, V, S>

§

type Output = Slice<K, V>

§

impl<K, V, S> Index<RangeTo<usize>> for IndexMap<K, V, S>

§

type Output = Slice<K, V>

§

impl<K, V, S> Index<RangeToInclusive<usize>> for IndexMap<K, V, S>

§

type Output = Slice<K, V>

§

impl<K, V, S, Q> Index<&Q> for MultiMap<K, V, S>
where K: Eq + Hash + Borrow<Q>, Q: Eq + Hash + ?Sized, S: BuildHasher,

§

type Output = V

Source§

impl<N, E, Ty, Ix> Index<EdgeIndex<Ix>> for Graph<N, E, Ty, Ix>
where Ty: EdgeType, Ix: IndexType,

Index the Graph by EdgeIndex to access edge weights.

Panics if the edge doesn’t exist.

Source§

impl<N, E, Ty, Ix> Index<NodeIndex<Ix>> for Graph<N, E, Ty, Ix>
where Ty: EdgeType, Ix: IndexType,

Index the Graph by NodeIndex to access node weights.

Panics if the node doesn’t exist.

Source§

impl<N, E, Ty, Ix> Index<Ix> for Csr<N, E, Ty, Ix>
where Ty: EdgeType, Ix: IndexType,

Source§

impl<Q> Index<&Q> for Map<String, Value>
where String: Borrow<Q>, Q: Ord + Eq + Hash + ?Sized,

Access an element of this map. Panics if the given key is not present in the map.

match val {
    Value::String(s) => Some(s.as_str()),
    Value::Array(arr) => arr[0].as_str(),
    Value::Object(map) => map["type"].as_str(),
    _ => None,
}
§

impl<T> Index<(Bound<usize>, Bound<usize>)> for Slice<T>

§

type Output = Slice<T>

§

impl<T> Index<usize> for StackRef<T>
where T: Stackable,

§

type Output = <T as ForeignType>::Ref

§

impl<T> Index<usize> for NonEmptyVec<T>

§

type Output = T

§

impl<T> Index<usize> for Slab<T>

§

type Output = T

§

impl<T> Index<usize> for Slice<T>

§

type Output = T

§

impl<T> Index<usize> for WrapBox<T>

§

type Output = T

§

impl<T> Index<Range<usize>> for Slice<T>

§

type Output = Slice<T>

§

impl<T> Index<Range<usize>> for WrapBox<T>

§

type Output = [T]

§

impl<T> Index<RangeFrom<usize>> for Slice<T>

§

type Output = Slice<T>

§

impl<T> Index<RangeFull> for Slice<T>

§

type Output = Slice<T>

§

impl<T> Index<RangeInclusive<usize>> for Slice<T>

§

type Output = Slice<T>

§

impl<T> Index<RangeTo<usize>> for Slice<T>

§

type Output = Slice<T>

§

impl<T> Index<RangeToInclusive<usize>> for Slice<T>

§

type Output = Slice<T>

§

impl<T> Index<PatternID> for [T]

§

type Output = T

§

impl<T> Index<PatternID> for [T]

§

type Output = T

§

impl<T> Index<PatternID> for rama::http::grpc::protobuf::prost::alloc::vec::Vec<T>

Available on crate feature alloc only.
§

type Output = T

§

impl<T> Index<PatternID> for rama::http::grpc::protobuf::prost::alloc::vec::Vec<T>

§

type Output = T

§

impl<T> Index<SmallIndex> for [T]

§

type Output = T

§

impl<T> Index<SmallIndex> for [T]

§

type Output = T

§

impl<T> Index<SmallIndex> for rama::http::grpc::protobuf::prost::alloc::vec::Vec<T>

Available on crate feature alloc only.
§

type Output = T

§

impl<T> Index<SmallIndex> for rama::http::grpc::protobuf::prost::alloc::vec::Vec<T>

§

type Output = T

§

impl<T> Index<StateID> for [T]

§

type Output = T

§

impl<T> Index<StateID> for [T]

§

type Output = T

§

impl<T> Index<StateID> for rama::http::grpc::protobuf::prost::alloc::vec::Vec<T>

Available on crate feature alloc only.
§

type Output = T

§

impl<T> Index<StateID> for rama::http::grpc::protobuf::prost::alloc::vec::Vec<T>

§

type Output = T

1.0.0 · Source§

impl<T, A> Index<usize> for VecDeque<T, A>
where A: Allocator,

§

impl<T, F> Index<usize> for VarZeroSlice<T, F>
where T: VarULE + ?Sized, F: VarZeroVecFormat,

§

type Output = T

1.0.0 (const: unstable) · Source§

impl<T, I> Index<I> for [T]
where I: SliceIndex<[T]>,

1.0.0 · Source§

impl<T, I, A> Index<I> for rama::http::grpc::protobuf::prost::alloc::vec::Vec<T, A>
where I: SliceIndex<[T]>, A: Allocator,

§

impl<T, I, A> Index<I> for Vec<T, A>
where I: SliceIndex<[T]>, A: Allocator,

§

type Output = <I as SliceIndex<[T]>>::Output

1.50.0 (const: unstable) · Source§

impl<T, I, const N: usize> Index<I> for [T; N]
where [T]: Index<I>,

Source§

type Output = <[T] as Index<I>>::Output

Source§

impl<T, P> Index<usize> for Punctuated<T, P>

§

impl<T, S> Index<(Bound<usize>, Bound<usize>)> for IndexSet<T, S>

§

type Output = Slice<T>

§

impl<T, S> Index<usize> for IndexSet<T, S>

Access [IndexSet] values at indexed positions.

§Examples

use indexmap::IndexSet;

let mut set = IndexSet::new();
for word in "Lorem ipsum dolor sit amet".split_whitespace() {
    set.insert(word.to_string());
}
assert_eq!(set[0], "Lorem");
assert_eq!(set[1], "ipsum");
set.reverse();
assert_eq!(set[0], "amet");
assert_eq!(set[1], "sit");
set.sort();
assert_eq!(set[0], "Lorem");
assert_eq!(set[1], "amet");
use indexmap::IndexSet;

let mut set = IndexSet::new();
set.insert("foo");
println!("{:?}", set[10]); // panics!
§

type Output = T

§

impl<T, S> Index<Range<usize>> for IndexSet<T, S>

§

type Output = Slice<T>

§

impl<T, S> Index<RangeFrom<usize>> for IndexSet<T, S>

§

type Output = Slice<T>

§

impl<T, S> Index<RangeFull> for IndexSet<T, S>

§

type Output = Slice<T>

§

impl<T, S> Index<RangeInclusive<usize>> for IndexSet<T, S>

§

type Output = Slice<T>

§

impl<T, S> Index<RangeTo<usize>> for IndexSet<T, S>

§

type Output = Slice<T>

§

impl<T, S> Index<RangeToInclusive<usize>> for IndexSet<T, S>

§

type Output = Slice<T>

§

impl<T, const AMOUNT_OF_BINS: usize, const BIN_OFFSET: u32> Index<usize> for AppendOnlyVec<T, AMOUNT_OF_BINS, BIN_OFFSET>

§

type Output = T

§

impl<const N: usize, T> Index<usize> for NonEmptySmallVec<N, T>

§

type Output = T