# MoreTypes

More types for your types! ## Rationale This library is a successor to my `records` library, designed to make it more modular and comosable. Instead of one `record` attribute, `moretypes` provides several attributes that can be commposed to give objects certain properties. This is different from traits, as these properties are often implementations of multiple traits, constructors, behavioural changes, etc. ## Records Records in MoreTypes are structs with all fields public (like `records::record`, but without most of the methods). They are useful for cases like configuration structs, where placing `pub` before every field is annoying boilerplate at best and logically erroneous at worst. Private fields preceeded by underscores remain private. ```rust use moretypes::record; #[record] pub struct Config { option1: String, option2: u32, } pub fn main() { let cfg = Config { option1: String::from("Foo"), option2: 69, }; println!("option1 = {}, option2 = {}", cfg.option1, cfg.option2); } ``` ## Named Tuples Named tuples are structs with named fields that are able to be used similar to tuple structs. They provide both the ability to convert to/from tuples and a way to construct them like tuples (both of these can be switched off using flags). They are useful as a replacement for tuple structs, where you want named fields and ordering at the same time. The fields are ordered based on where they are declared. ```rust use moretypes::named_tuple; #[named_tuple] pub struct Vec3 { x: T, y: T, z: T, } pub fn main() { let pos = Vec3::new(1.0, 2.0, 3.0); println!("{:?}", pos.as_tuple()); } ```