Macro covalent::lock_data [−][src]
A macro to generate a struct containing a list of fields that may be locked. This allows for more intuitive concurrency, by abstracting away the lock-unlock logic and potential lock mishaps.
Examples
struct HelloWorldObject { message: &'static str } struct Output { message: Option<&'static str> } use covalent::lock_data; use covalent::events::{Event, EventHandler}; lock_data! { HelloWorldData hello_world: read HelloWorldObject, output: write Output } fn create_locks() { use std::sync::*; use covalent::scene::{Event, EventHandler}; let hello_world = Arc::new(RwLock::new(HelloWorldObject { message: "Hello, world!" })); let output = Arc::new(RwLock::new(Output { message: None })); let data = Arc::new(RwLock::new(HelloWorldData { hello_world: Arc::downgrade(&hello_world), output: Arc::downgrade(&output) })); struct HelloWorldEvent {} impl Event for HelloWorldEvent {} let event_handler = Arc::new(RwLock::new(EventHandler::<HelloWorldEvent>::new())); HelloWorldData::listen(&data, &event_handler, |event, hello_world, output| { output.message = Some(hello_world.message); }); }