mirror of
https://github.com/rust-lang-uz/maydon.git
synced 2026-02-15 21:24:18 +00:00
📝 | Field enum generation for a struct [maintainer=@orzklv]
https://crates.io/crates/maydon
- Rust 100%
| .github | ||
| src | ||
| tests | ||
| .envrc | ||
| .gitattributes | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| default.nix | ||
| flake.lock | ||
| flake.nix | ||
| LICENSE-APACHE | ||
| LICENSE-MIT | ||
| README.md | ||
| rust-toolchain.toml | ||
| shell.nix | ||
Field enum generation for struct.
Motivation
Upon writing some rusty code for CLI config management, I simply declared a struct like this:
#[derive(Debug, Serialize, Deserialize)]
pub struct Config {
pub url: String,
pub port: u16,
pub database_url: String,
pub threads: u16,
}
Also, in order to have set function with proper typed selection, I declared another enum named Field:
pub enum Field {
Url,
Port,
Database,
Unknown,
Threads,
}
The thing is, I wanted to automate creation of enum generation. Ordinary macros wouldn't be a good viable solution, so I wrote maydon from ground up. I might be missing something or prequisites, but this is what I came up with:
use maydon::Maydon;
#[derive(Maydon)]
#[field_name = "Selector"]
pub struct Config {
pub url: String,
pub port: u16,
}
// The macro should generate:
fn main() {
let _ = Selector::Url;
let _ = Selector::Port;
let _ = Selector::Unknown;
}
License
This project is licensed under the MIT or Apache-2.0 license - see the LICENSE-MIT or LICENSE-APACHE file for details.