## '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. [[![](http://meritbadge.herokuapp.com/has)](https://crates.io/crates/has) [![License: MPL 2.0](https://img.shields.io/badge/License-MPL%202.0-brightgreen.svg)](https://opensource.org/licenses/MPL-2.0) [![Travis Build Status](https://travis-ci.org/Proksima/has.svg?branch=master)](https://travis-ci.org/Proksima/has) ### Documentation http://proksima.github.io/has-doc/has/index.html ### Simple example ```rust #[macro_use] extern crate has; use has::*; struct Apple; trait ApplesContainer: HasMut> { fn take_apple(&mut self) -> Option { self.get_mut().pop() } fn put_apple(&mut self, apple: Apple) { self.get_mut().push(apple); } } #[derive(Default)] struct Basket { pub apples: Vec, } impl ApplesContainer for Basket {} impl_has!(Basket, Vec, 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); } ```