Skip to main content

derive_termination/
lib.rs

1#![doc = include_str!("../README.md")]
2
3mod termination;
4
5use proc_macro::TokenStream;
6use syn::parse_macro_input;
7
8/// Derive `std::process::Termination` for an enum. See crate docs for details.
9#[proc_macro_derive(Termination, attributes(exit_code))]
10pub fn derive_termination(input: TokenStream) -> TokenStream {
11    let input = parse_macro_input!(input);
12    termination::build_termination_impl(&input)
13        .unwrap_or_else(syn::Error::into_compile_error)
14        .into()
15}
16
17/// Derive an inherent `exit_code_to_variant()` method on an enum. See crate docs for details.
18#[proc_macro_derive(ExitCodeTable, attributes(exit_code))]
19pub fn derive_exit_code_table(input: TokenStream) -> TokenStream {
20    let input = parse_macro_input!(input);
21    termination::build_exit_code_table_impl(&input)
22        .unwrap_or_else(syn::Error::into_compile_error)
23        .into()
24}