Trait Fields

Source
pub trait Fields<K, V> {
    type Key<'k>
       where Self: 'k;
    type Val<'v>
       where Self: 'v;

    // Required method
    fn fields<'s>(&'s self) -> impl IteratorTrait;
}
Expand description

A trait for iterating over fields convertible to a specified type within an entity.

This trait provides a mechanism for accessing fields in collections or entities, converting them into a desired type for iteration.

§Type Parameters

  • K: The key type, typically representing the index or identifier of each field.
  • V: The value type that fields are converted into during iteration.

§Associated Types

  • Val<'v>: The type of value yielded by the iterator, parameterized by a lifetime 'v. This ensures the values’ lifetimes are tied to the entity being iterated over.

§Example

use reflect_tools::{ Fields, IteratorTrait };

struct MyCollection< V >
{
  data : Vec< V >,
}

impl< V > Fields< usize, &V > for MyCollection< V >
{
  type Key< 'k > = usize where V : 'k;
  type Val< 'v > = & 'v V where Self : 'v;

  fn fields( & self ) -> impl IteratorTrait< Item = ( usize, Self::Val< '_ > ) >
  {
    self.data.iter().enumerate()
  }
}

This example shows MyCollection implementing Fields, allowing iteration over its elements with both index and value.

Required Associated Types§

Source

type Key<'k> where Self: 'k

The type of key yielded by the iterator, parameterized by a lifetime 'k. This ensures the values’ lifetimes are tied to the entity being iterated over.

Source

type Val<'v> where Self: 'v

The type of value yielded by the iterator, parameterized by a lifetime 'v. This ensures the values’ lifetimes are tied to the entity being iterated over.

Required Methods§

Source

fn fields<'s>(&'s self) -> impl IteratorTrait

Returns an iterator over fields of the specified type within the entity.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<K, V, Borrowed> Fields<K, Option<Cow<'_, Borrowed>>> for BTreeMap<K, V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>,

Source§

type Key<'k> = &'k K where BTreeMap<K, V>: 'k, K: 'k

Source§

type Val<'v> = Option<Cow<'v, Borrowed>> where BTreeMap<K, V>: 'v, V: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<K, V, Borrowed> Fields<K, Option<Cow<'_, Borrowed>>> for HashMap<K, V>
where K: Hash + Eq, Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>,

Source§

type Key<'k> = &'k K where HashMap<K, V>: 'k, K: 'k

Source§

type Val<'v> = Option<Cow<'v, Borrowed>> where HashMap<K, V>: 'v, V: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<K, V, Borrowed> Fields<K, &Borrowed> for BTreeMap<K, V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>,

Source§

type Key<'k> = &'k K where BTreeMap<K, V>: 'k, K: 'k

Source§

type Val<'v> = &'v Borrowed where BTreeMap<K, V>: 'v, V: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<K, V, Borrowed> Fields<K, &Borrowed> for HashMap<K, V>
where K: Hash + Eq, Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>,

Source§

type Key<'k> = &'k K where HashMap<K, V>: 'k, K: 'k

Source§

type Val<'v> = &'v Borrowed where HashMap<K, V>: 'v, V: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<K, V, Borrowed, Marker> Fields<K, OptionalCow<'_, Borrowed, Marker>> for BTreeMap<K, V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>, Marker: Clone + Copy + 'static,

Source§

type Key<'k> = &'k K where BTreeMap<K, V>: 'k, K: 'k

Source§

type Val<'v> = OptionalCow<'v, Borrowed, Marker> where BTreeMap<K, V>: 'v, V: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<K, V, Borrowed, Marker> Fields<K, OptionalCow<'_, Borrowed, Marker>> for HashMap<K, V>
where K: Hash + Eq, Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>, Marker: Clone + Copy + 'static,

Source§

type Key<'k> = &'k K where HashMap<K, V>: 'k, K: 'k

Source§

type Val<'v> = OptionalCow<'v, Borrowed, Marker> where HashMap<K, V>: 'v, V: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed> Fields<usize, Option<Cow<'_, Borrowed>>> for BTreeSet<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>,

Source§

type Key<'k> = usize where BTreeSet<V>: 'k, usize: 'k

Source§

type Val<'v> = Option<Cow<'v, Borrowed>> where BTreeSet<V>: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed> Fields<usize, Option<Cow<'_, Borrowed>>> for LinkedList<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>,

Source§

type Key<'k> = usize where LinkedList<V>: 'k, usize: 'k

Source§

type Val<'v> = Option<Cow<'v, Borrowed>> where LinkedList<V>: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed> Fields<usize, Option<Cow<'_, Borrowed>>> for VecDeque<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>,

Source§

type Key<'k> = usize where VecDeque<V>: 'k, usize: 'k

Source§

type Val<'v> = Option<Cow<'v, Borrowed>> where VecDeque<V>: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed> Fields<usize, Option<Cow<'_, Borrowed>>> for Vec<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>,

Source§

type Key<'k> = usize where Vec<V>: 'k, usize: 'k

Source§

type Val<'v> = Option<Cow<'v, Borrowed>> where Vec<V>: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed> Fields<usize, Option<Cow<'_, Borrowed>>> for HashSet<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>,

Source§

type Key<'k> = usize where HashSet<V>: 'k, usize: 'k

Source§

type Val<'v> = Option<Cow<'v, Borrowed>> where HashSet<V>: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed> Fields<usize, &Borrowed> for BTreeSet<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>,

Source§

type Key<'k> = usize where BTreeSet<V>: 'k, usize: 'k

Source§

type Val<'v> = &'v Borrowed where BTreeSet<V>: 'v, V: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed> Fields<usize, &Borrowed> for LinkedList<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>,

Source§

type Key<'k> = usize where LinkedList<V>: 'k, usize: 'k

Source§

type Val<'v> = &'v Borrowed where LinkedList<V>: 'v, V: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed> Fields<usize, &Borrowed> for VecDeque<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>,

Source§

type Key<'k> = usize where VecDeque<V>: 'k, usize: 'k

Source§

type Val<'v> = &'v Borrowed where VecDeque<V>: 'v, V: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed> Fields<usize, &Borrowed> for Vec<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>,

Source§

type Key<'k> = usize where Vec<V>: 'k, usize: 'k

Source§

type Val<'v> = &'v Borrowed where Vec<V>: 'v, V: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed> Fields<usize, &Borrowed> for HashSet<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>,

Source§

type Key<'k> = usize where HashSet<V>: 'k, usize: 'k

Source§

type Val<'v> = &'v Borrowed where HashSet<V>: 'v, V: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed, Marker> Fields<usize, OptionalCow<'_, Borrowed, Marker>> for BTreeSet<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>, Marker: Clone + Copy + 'static,

Source§

type Key<'k> = usize where BTreeSet<V>: 'k, usize: 'k

Source§

type Val<'v> = OptionalCow<'v, Borrowed, Marker> where BTreeSet<V>: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed, Marker> Fields<usize, OptionalCow<'_, Borrowed, Marker>> for LinkedList<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>, Marker: Clone + Copy + 'static,

Source§

type Key<'k> = usize where LinkedList<V>: 'k, usize: 'k

Source§

type Val<'v> = OptionalCow<'v, Borrowed, Marker> where LinkedList<V>: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed, Marker> Fields<usize, OptionalCow<'_, Borrowed, Marker>> for VecDeque<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>, Marker: Clone + Copy + 'static,

Source§

type Key<'k> = usize where VecDeque<V>: 'k, usize: 'k

Source§

type Val<'v> = OptionalCow<'v, Borrowed, Marker> where VecDeque<V>: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed, Marker> Fields<usize, OptionalCow<'_, Borrowed, Marker>> for Vec<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>, Marker: Clone + Copy + 'static,

Source§

type Key<'k> = usize where Vec<V>: 'k, usize: 'k

Source§

type Val<'v> = OptionalCow<'v, Borrowed, Marker> where Vec<V>: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Source§

impl<V, Borrowed, Marker> Fields<usize, OptionalCow<'_, Borrowed, Marker>> for HashSet<V>
where Borrowed: ToOwned + 'static + ?Sized, V: Borrow<Borrowed>, Marker: Clone + Copy + 'static,

Source§

type Key<'k> = usize where HashSet<V>: 'k, usize: 'k

Source§

type Val<'v> = OptionalCow<'v, Borrowed, Marker> where HashSet<V>: 'v

Source§

fn fields<'s>(&'s self) -> impl IteratorTrait

Implementors§