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;