TurtleContainer

Trait TurtleContainer 

Source
pub trait TurtleContainer {
    type Item;

    // Required method
    fn inner(&self) -> &dyn MovingTurtle<Item = Self::Item>;
}
Expand description

This trait indicates that the implementor contains a turtle for us to play with.

It’s a bit annoying to have to implement this trait everywhere, so using the dcc-lsystem-derive crate you can do the following:

use dcc_lsystem::turtle::{SimpleTurtle, TurtleContainer};
use dcc_lsystem_derive::TurtleContainer;

#[derive(TurtleContainer)]
struct BasicContainer {
    #[turtle]
    inner : SimpleTurtle,

    /* <----- some other fields ----- */
}

which is roughly equivalent to the following:

use dcc_lsystem::turtle::{SimpleTurtle, TurtleContainer, MovingTurtle};

struct BasicContainer {
    inner : SimpleTurtle,

    /* <----- some other fields ----- */
}

impl TurtleContainer for BasicContainer {
    type Item = <SimpleTurtle as MovingTurtle>::Item;

    fn inner(&self) -> &MovingTurtle<Item = Self::Item> {
        &self.inner
    }
}

Required Associated Types§

Required Methods§

Source

fn inner(&self) -> &dyn MovingTurtle<Item = Self::Item>

Implementors§

Source§

impl TurtleContainer for TurtleLSystemState

Source§

impl<T> TurtleContainer for dyn MovingTurtle<Item = T>

Every turtle contains a turtle.

Source§

type Item = T