1 unstable release
Uses old Rust 2015
0.1.0 | Apr 9, 2016 |
---|
#5 in #paradigms
Used in quandl-v3
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.
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);
}