#oop #object #has-a #hasa #paradigm

has

Introducing 'has a' relationship for Rust's traits

1 unstable release

Uses old Rust 2015

0.1.0 Apr 9, 2016

#16 in #oop

24 downloads per month
Used in quandl-v3

MPL-2.0 license

5KB

'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);
}

No runtime deps