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

Source§

impl Index<usize> for Scalar

Source§

impl Index<Span> for str

Source§

impl Index<Span> for [u8]

Source§

impl Index<Range<Position>> for Url

Source§

impl Index<Range<usize>> for ByteString

Source§

impl Index<Range<usize>> for UninitSlice

Source§

impl Index<RangeFrom<Position>> for Url

Source§

impl Index<RangeFrom<usize>> for ByteString

1.47.0 · Source§

impl Index<RangeFrom<usize>> for CStr

Source§

impl Index<RangeFrom<usize>> for UninitSlice

Source§

impl Index<RangeFull> for ByteString

1.7.0 · Source§

impl Index<RangeFull> for CString

1.0.0 · Source§

impl Index<RangeFull> for OsString

Source§

impl Index<RangeFull> for UninitSlice

Source§

impl Index<RangeFull> for Url

Source§

impl Index<RangeInclusive<usize>> for ByteString

Source§

impl Index<RangeInclusive<usize>> for UninitSlice

Source§

impl Index<RangeTo<Position>> for Url

Source§

impl Index<RangeTo<usize>> for ByteString

Source§

impl Index<RangeTo<usize>> for UninitSlice

Source§

impl Index<RangeToInclusive<usize>> for ByteString

Source§

impl Index<RangeToInclusive<usize>> for UninitSlice

Source§

impl<'h> Index<usize> for regex::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.

Source§

impl<'h> Index<usize> for regex::regex::string::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.

Source§

impl<'h, 'n> Index<&'n str> for regex::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.

Source§

impl<'h, 'n> Index<&'n str> for regex::regex::string::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.

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

impl<A, O, Idx> Index<Idx> for BitArray<A, O>
where A: BitViewSized, O: BitOrder, BitSlice<<A as BitView>::Store, O>: Index<Idx>,

Source§

type Output = <BitSlice<<A as BitView>::Store, O> as Index<Idx>>::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 H256
where I: SliceIndex<[u8]>,

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

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>,

Source§

impl<I> Index<I> for bitcoin_hashes::hash160::Hash
where I: SliceIndex<[u8]>,

Source§

impl<I> Index<I> for bitcoin_hashes::ripemd160::Hash
where I: SliceIndex<[u8]>,

Source§

impl<I> Index<I> for bitcoin_hashes::sha1::Hash
where I: SliceIndex<[u8]>,

Source§

impl<I> Index<I> for bitcoin_hashes::sha256::Hash
where I: SliceIndex<[u8]>,

Source§

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

Source§

impl<I> Index<I> for bitcoin_hashes::sha256d::Hash
where I: SliceIndex<[u8]>,

Source§

impl<I> Index<I> for bitcoin_hashes::sha512::Hash
where I: SliceIndex<[u8]>,

Source§

impl<I> Index<I> for bitcoin_hashes::sha512_256::Hash
where I: SliceIndex<[u8]>,

Source§

impl<I> Index<I> for bitcoin_hashes::siphash24::Hash
where I: SliceIndex<[u8]>,

Source§

impl<I, T> Index<I> for bitcoin_hashes::sha256t::Hash<T>
where I: SliceIndex<[u8]>, T: Tag,

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,

1.0.0 · Source§

impl<K, Q, V, S> Index<&Q> for std::collections::hash::map::HashMap<K, V, S>
where K: Eq + Hash + Borrow<Q>, Q: Eq + Hash + ?Sized, S: BuildHasher,

Source§

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

Source§

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

Source§

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

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,
}
Source§

impl<T> Index<usize> for Hmac<T>
where T: Hash,

Source§

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

Source§

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

Source§

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

Source§

impl<T> Index<PatternID> for avail_rust_client::ext::subxt_core::ext::scale_encode::Vec<T>

Source§

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

Source§

impl<T> Index<SmallIndex> for avail_rust_client::ext::subxt_core::ext::scale_encode::Vec<T>

Source§

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

Source§

impl<T> Index<StateID> for avail_rust_client::ext::subxt_core::ext::scale_encode::Vec<T>

Source§

impl<T> Index<Range<usize>> for Hmac<T>
where T: Hash,

Source§

impl<T> Index<RangeFrom<usize>> for Hmac<T>
where T: Hash,

Source§

impl<T> Index<RangeFull> for Hmac<T>
where T: Hash,

Source§

impl<T> Index<RangeTo<usize>> for Hmac<T>
where T: Hash,

1.0.0 · Source§

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

Source§

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

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 avail_rust_client::ext::subxt_core::ext::scale_encode::Vec<T, A>
where I: SliceIndex<[T]>, A: Allocator,

Source§

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

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, O> Index<usize> for BitSlice<T, O>
where T: BitStore, O: BitOrder,

Source§

impl<T, O> Index<Range<usize>> for BitSlice<T, O>
where O: BitOrder, T: BitStore,

Source§

impl<T, O> Index<RangeFrom<usize>> for BitSlice<T, O>
where O: BitOrder, T: BitStore,

Source§

impl<T, O> Index<RangeFull> for BitSlice<T, O>
where O: BitOrder, T: BitStore,

Source§

impl<T, O> Index<RangeInclusive<usize>> for BitSlice<T, O>
where O: BitOrder, T: BitStore,

Source§

impl<T, O> Index<RangeTo<usize>> for BitSlice<T, O>
where O: BitOrder, T: BitStore,

Source§

impl<T, O> Index<RangeToInclusive<usize>> for BitSlice<T, O>
where O: BitOrder, T: BitStore,

Source§

impl<T, O, Idx> Index<Idx> for BitBox<T, O>
where T: BitStore, O: BitOrder, BitSlice<T, O>: Index<Idx>,

Source§

type Output = <BitSlice<T, O> as Index<Idx>>::Output

Source§

impl<T, O, Idx> Index<Idx> for BitVec<T, O>
where T: BitStore, O: BitOrder, BitSlice<T, O>: Index<Idx>,

Source§

type Output = <BitSlice<T, O> as Index<Idx>>::Output