1#![doc = include_str!("../README.md")]
2
3#![crate_type = "proc-macro"]
13#![forbid(unsafe_code)]
14#![warn(
15 clippy::unwrap_used,
16 rust_2018_idioms,
17 trivial_casts,
18 unused_qualifications
19)]
20
21macro_rules! abort {
22 ( $tokens:expr, $message:expr $(,)? ) => {
23 return Err(syn::Error::new_spanned($tokens, $message))
24 };
25}
26
27mod attributes;
28mod decode;
29mod encode;
30
31use proc_macro::TokenStream;
32use syn::{DeriveInput, parse_macro_input};
33
34#[proc_macro_derive(Decode, attributes(ssh))]
38pub fn derive_decode(input: TokenStream) -> TokenStream {
39 let input = parse_macro_input!(input as DeriveInput);
40 match decode::try_derive_decode(input) {
41 Ok(t) => t.into(),
42 Err(e) => e.to_compile_error().into(),
43 }
44}
45
46#[proc_macro_derive(Encode, attributes(ssh))]
50pub fn derive_encode(input: TokenStream) -> TokenStream {
51 let input = parse_macro_input!(input as DeriveInput);
52 match encode::try_derive_encode(input) {
53 Ok(t) => t.into(),
54 Err(e) => e.to_compile_error().into(),
55 }
56}