#![doc = include_str!("../README.md")]
#![crate_type = "proc-macro"]
#![forbid(unsafe_code)]
#![warn(
clippy::unwrap_used,
rust_2018_idioms,
trivial_casts,
unused_qualifications
)]
macro_rules! abort {
( $tokens:expr, $message:expr $(,)? ) => {
return Err(syn::Error::new_spanned($tokens, $message))
};
}
mod decode;
mod encode;
mod field_ir;
use crate::{decode::DeriveDecode, encode::DeriveEncode, field_ir::FieldIr};
use proc_macro::TokenStream;
use syn::{parse_macro_input, DeriveInput};
#[proc_macro_derive(Decode, attributes(ssh))]
pub fn derive_decode(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
match DeriveDecode::new(input) {
Ok(t) => t.to_tokens().into(),
Err(e) => e.to_compile_error().into(),
}
}
#[proc_macro_derive(Encode, attributes(ssh))]
pub fn derive_encode(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
match DeriveEncode::new(input) {
Ok(t) => t.to_tokens().into(),
Err(e) => e.to_compile_error().into(),
}
}