sample_config_macros/
lib.rs

1//! Macros for sample configs.
2#![allow(clippy::expect_used)] // Allowed in procedural macros.
3
4mod attributes;
5mod derive;
6
7use derive::derive_sample_config;
8use proc_macro::TokenStream;
9use syn::{parse_macro_input, DeriveInput};
10
11/// Derive `SampleConfig` for structs (with doc comments on their fields) and
12/// enums.
13///
14/// Example:
15/// ```no_compile
16/// use sample_config::SampleConfig;
17///
18/// #[derive(Debug, SampleConfig)]
19/// struct MyConfig {
20///     /// My field documentation.
21///     my_field: String,
22/// }
23///
24/// let config = MyConfig { my_field: "example".to_owned() };
25/// let _yaml_file_string = config.generate_sample_yaml();
26/// ```
27#[proc_macro_derive(SampleConfig)]
28pub fn sample_config(input: TokenStream) -> TokenStream {
29	let input = parse_macro_input!(input as DeriveInput);
30	derive_sample_config(input).into()
31}