Crate consumable_vec

Source
Expand description

Provides a vector which content can be consumed

This allows multiple producers to add data to a shared data base. Any consumer can take out data in a deleting manner if certain criteria are met, e.g. a search pattern is fulfilled in a String implementation.

This crate provides two different implementations: The struct ConsumableVec is a plain implementation of the trait Consumable. Here the user needs to take care of the ownership of the object when adding data or trying to consume data from it.
The struct SharedConsumableVec uses a ConsumableVec which can be referenced by multiple owners from multiple threads.

§Example:

use consumable_vec::{SharedConsumableVec, Consumable};
use std::thread;

let con_vec = SharedConsumableVec::default();

let producer = con_vec.clone();

thread::spawn(move || {
    for n in 1..100 {
        producer.add(format!("Produced: {}", n));
    }   
});

thread::spawn(move || {
   loop {
    if let Some(consumed) = con_vec.consume("Produced".to_string()) {
        println!("{:?}", consumed);
        if consumed.inner().iter().filter(|c| c.contains("99")).count() > 0 {
            break;
        }
    }
   }   
});

Structs§

ConsumableVec
Generic structure for storing consumable data of type T
SharedConsumableVec
Generic structure for storing consumable data of type T in a shared Vector

Traits§

Consumable
Consume content from a data collection