Expand description
This crate provides handy implementations for some design pattern utilities.
§Features
Builderderive macro for appyling Builder pattern by generating extra Builder struct.- Macro
observeris for trait’s and is for implementing Observer pattern by creating extraPublisherstruct for the spesified instances whom implement this trait type.
§Example
use patternutils::Builder;
#[derive(Builder)]
#[builder_attr(name = "CommandCreator", opt_in)]
struct Command {
#[builder_field(name = "value", include = true)]
definition: String,
#[builder_field(include = true)]
arg_count: usize,
accepted_flag_fallback: fn(val: usize) -> usize,
childs: Vec<Command>,
}
let mut builder = Command::builder();
let command = builder
.value(String::from("my-command"))
.arg_count(3)
.build(|val| {return val + 5;}, vec![]);
assert_eq!(command.definition, String::from("my-command"));
assert_eq!(command.arg_count, 3);
assert_eq!((command.accepted_flag_fallback)(67), 72);
assert_eq!(command.childs.len(), 0);Attribute Macros§
- observer
- Implements the
event(&mut self)&as_any(&self)methodes to applied trait and generate Observer struct to use observer pattern.
Derive Macros§
- Builder
- Derives a builder pattern for the struct.