has

Introducing 'has a' relationship for Rust's traits.


Keywords
oop, has, hasa, object, paradigm
License
MPL-2.0

Documentation

'Has a' relationship for Rust's traits

This crate offers an alternative for a missing feature of the Rust Programming Language. That is, the possibility for traits to hold states.

License: MPL 2.0 Travis Build Status

Documentation

http://proksima.github.io/has-doc/has/index.html

Simple example

#[macro_use]
extern crate has;

use has::*;

struct Apple;

trait ApplesContainer: HasMut<Vec<Apple>> {
    fn take_apple(&mut self) -> Option<Apple> {
        self.get_mut().pop()
    }

    fn put_apple(&mut self, apple: Apple) {
        self.get_mut().push(apple);
    }
}

#[derive(Default)]
struct Basket {
    pub apples: Vec<Apple>,
}

impl ApplesContainer for Basket {}
impl_has!(Basket, Vec<Apple>, apples);

fn main() {
    let mut basket = Basket::default();

    basket.put_apple(Apple);
    basket.put_apple(Apple);
    basket.put_apple(Apple);

    basket.take_apple();

    assert_eq!(basket.apples.len(), 2);
}