Crates.io | has |
lib.rs | has |
version | 0.1.0 |
source | src |
created_at | 2016-04-09 23:22:35.718685 |
updated_at | 2016-04-09 23:22:35.718685 |
description | Introducing 'has a' relationship for Rust's traits. |
homepage | https://github.com/Proksima/has |
repository | https://github.com/Proksima/has |
max_upload_size | |
id | 4713 |
size | 4,370 |
This crate offers an alternative for a missing feature of the Rust Programming Language. That is, the possibility for traits to hold states.
http://proksima.github.io/has-doc/has/index.html
#[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);
}