patternutils/lib.rs
1//! This crate provides handy implementations for some design pattern utilities.
2//!
3//! # Features
4//!
5//! - `Builder`derive macro for appyling Builder pattern by generating extra Builder struct.
6//! - Macro `observer` is for trait's and is for implementing Observer pattern by creating extra `Publisher` struct for the spesified instances whom implement this trait type.
7//!
8//! # Example
9//!
10//! ```rust
11//! use patternutils::Builder;
12//!
13//! #[derive(Builder)]
14//! #[builder_attr(name = "CommandCreator", opt_in)]
15//! struct Command {
16//! #[builder_field(name = "value", include = true)]
17//! definition: String,
18//!
19//! #[builder_field(include = true)]
20//! arg_count: usize,
21//!
22//! accepted_flag_fallback: fn(val: usize) -> usize,
23//! childs: Vec<Command>,
24//! }
25//!
26//! let mut builder = Command::builder();
27//! let command = builder
28//! .value(String::from("my-command"))
29//! .arg_count(3)
30//! .build(|val| {return val + 5;}, vec![]);
31//!
32//! assert_eq!(command.definition, String::from("my-command"));
33//! assert_eq!(command.arg_count, 3);
34//! assert_eq!((command.accepted_flag_fallback)(67), 72);
35//! assert_eq!(command.childs.len(), 0);
36//! ```
37pub use patternutils_derive::Builder;
38pub use patternutils_derive::observer;