diff --git a/sshwire_derive/src/lib.rs b/sshwire_derive/src/lib.rs index 5a7d95c240a56cd4d789dd3599580362e6e9e88a..7f8e28285b76a0cf3addfaa5f1892bc4cf7293cc 100644 --- a/sshwire_derive/src/lib.rs +++ b/sshwire_derive/src/lib.rs @@ -1,6 +1,10 @@ //! Used in conjunction with `sshwire.rs` and `packets.rs` +//! +//! `SSHWIRE_DEBUG` environment variable can be set at build time +//! to write generated files to the `target/` directory. use std::collections::HashSet; +use std::env; use proc_macro::Delimiter; use virtue::generate::FnSelfArg; @@ -8,6 +12,8 @@ use virtue::parse::{Attribute, AttributeLocation, EnumBody, StructBody}; use virtue::utils::{parse_tagged_attribute, ParsedAttribute}; use virtue::prelude::*; +const ENV_SSHWIRE_DEBUG: &'static str = &"SSHWIRE_DEBUG"; + #[proc_macro_derive(SSHEncode, attributes(sshwire))] pub fn derive_encode(input: proc_macro::TokenStream) -> proc_macro::TokenStream { let r = encode_inner(input).unwrap_or_else(|e| e.into_token_stream()); @@ -31,7 +37,9 @@ fn encode_inner(input: TokenStream) -> Result<TokenStream> { encode_enum(&mut gen, &att, body)?; } } - gen.export_to_file("SSHEncode"); + if env::var(ENV_SSHWIRE_DEBUG).is_ok() { + gen.export_to_file("SSHEncode"); + } gen.finish() } @@ -47,7 +55,9 @@ fn decode_inner(input: TokenStream) -> Result<TokenStream> { decode_enum(&mut gen, &att, body)?; } } - gen.export_to_file("SSHDecode"); + if env::var(ENV_SSHWIRE_DEBUG).is_ok() { + gen.export_to_file("SSHDecode"); + } gen.finish() }