https://github.com/someguynamedjosh/scones
Quick and powerful constructor/builder generation for Rust.
https://github.com/someguynamedjosh/scones
boilerplate builder builder-pattern constructor generated-code macro proc-macro rust
Last synced: 7 months ago
JSON representation
Quick and powerful constructor/builder generation for Rust.
- Host: GitHub
- URL: https://github.com/someguynamedjosh/scones
- Owner: someguynamedjosh
- Created: 2020-10-16T04:44:01.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-11-04T04:56:57.000Z (over 5 years ago)
- Last Synced: 2024-05-30T01:20:01.632Z (over 1 year ago)
- Topics: boilerplate, builder, builder-pattern, constructor, generated-code, macro, proc-macro, rust
- Language: Rust
- Homepage:
- Size: 37.1 KB
- Stars: 10
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Scones
[](https://crates.io/crates/scones)
[](https://docs.rs/scones)
[](https://docs.rs/scones_examples)
A crate for quick and powerful constructor/builder generation in Rust. Dual
licensed under `MIT OR Apache-2.0`. Example:
```rust
use scones::{make_builder, make_constructor};
#[make_builder]
#[make_constructor]
struct Basic {
int: i32,
string: String,
}
let instance = Basic::new(int, string);
let instance = BasicBuilder::new().string("str".to_owned()).int(12345).build();
// Triggers a compile-time error because we have not specified all fields yet:
// let instance = BasicBuilder::new().build();
#[make_constructor]
#[make_constructor(pub new_identical(shared: i32))]
pub struct MultipleConstructors {
#[value(shared for new_identical)]
pub a: i32,
#[value(shared for new_identical)]
pub b: i32,
#[value(shared for new_identical)]
pub c: i32,
#[value(true)]
#[value(false for new)]
pub identical: bool,
}
let instance = MultipleConstructors::new(1, 2, 3);
let instance = MultipleConstructors::new_identical(123);
#[make_constructor]
#[make_constructor(pub default_number)]
#[make_builder((field_1?))]
pub struct TupleStruct(
#[value(30 for default_number)] i32,
#[value("Unnamed".to_owned() for TupleStructBuilder)] String,
);
let instance = TupleStruct::default_number(field_1);
let instance = TupleStructBuilder::new().field_0(12345).build();
```