Trait EachCrateIndividual

Source
pub trait EachCrateIndividual {
    type Item;

    // Required methods
    fn new(individual: &Rc<Individual<Self::Item>>) -> Self;
    fn get_individual(&self) -> &Individual<Self::Item>;

    // Provided methods
    fn get_id(&self) -> usize { ... }
    fn get_value(&self) -> &Self::Item { ... }
}
Expand description

A trait for inividual defined by each crete.

A struct implmented this must have Rc<Individual<T>>.

  • T - A type of value.

§Example

use std::rc::Rc;
use scarlet_queen_core::each_individual::{Individual, EachCrateIndividual};

#[derive(PartialEq, Eq, Debug)]
struct SampleIndividual(Rc<Individual<u8>>);

impl EachCrateIndividual for SampleIndividual {
    type Item = u8;

    fn new(individual: &Rc<Individual<Self::Item>>) -> Self {
        SampleIndividual(Rc::clone(&individual))
    }

    fn get_individual(&self) -> &Individual<Self::Item> {
        self.0.as_ref()
    }
}

let r: Rc<Individual<u8>> = Rc::new(Individual::new(5u8));
let sample: SampleIndividual = SampleIndividual::new(&r);

assert_eq!(sample.get_individual(), r.as_ref());
assert_eq!(sample.get_id(), r.get_id());
assert_eq!(sample.get_value(), r.get_value());

Required Associated Types§

Required Methods§

Source

fn new(individual: &Rc<Individual<Self::Item>>) -> Self

Make individual from base individual.

  • individual - A base individual.
Source

fn get_individual(&self) -> &Individual<Self::Item>

Get this individual.

Provided Methods§

Source

fn get_id(&self) -> usize

Get an id of this individual.

Source

fn get_value(&self) -> &Self::Item

Get a value of this individual.

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.

Implementors§