roopes-core 0.1.1

Roopes is a Rust Object Oriented Pattern Element System. This crate provides generic traits and implementations for typical object-oriented patterns in Rust. It is intended to be used as a cluster of utility classes for implementing OOP-architected executables -- in Rust!
Documentation
use crate::prelude::*;
use std::{
    cell::RefCell,
    rc::Rc,
};

#[test]
fn latent_lambda_refcell_mutation()
{
    let has_run = Rc::new(RefCell::new(false));
    let has_run_ext = has_run.clone();

    let lc = emitter::Lambda::new(move || {
        let result = *has_run_ext.borrow_mut();
        (*has_run_ext.borrow_mut()) = true;
        result
    });

    assert!(!(*has_run.borrow()));
    assert!(!lc.emit());
    assert!((*has_run.borrow()));
    assert!(lc.emit());
}

#[test]
fn iterator_emitter()
{
    let test_iter = {
        let vec = vec![1, 2, 3];
        let iter = vec.into_iter();
        let rcb_iter = RefCell::new(Box::new(iter));
        emitter::Iterator::new(rcb_iter)
    };

    assert!(test_iter.emit() == Some(1));
    assert!(test_iter.emit() == Some(2));
    assert!(test_iter.emit() == Some(3));
    assert!(test_iter.emit() == None);
    assert!(test_iter.emit() == None);
}