diff options
Diffstat (limited to 'msg_socket/msg_on_socket_derive/msg_on_socket_derive.rs')
-rw-r--r-- | msg_socket/msg_on_socket_derive/msg_on_socket_derive.rs | 51 |
1 files changed, 37 insertions, 14 deletions
diff --git a/msg_socket/msg_on_socket_derive/msg_on_socket_derive.rs b/msg_socket/msg_on_socket_derive/msg_on_socket_derive.rs index d287ac0..bfca732 100644 --- a/msg_socket/msg_on_socket_derive/msg_on_socket_derive.rs +++ b/msg_socket/msg_on_socket_derive/msg_on_socket_derive.rs @@ -3,7 +3,6 @@ // found in the LICENSE file. #![recursion_limit = "256"] -extern crate proc_macro; use std::vec::Vec; @@ -18,14 +17,14 @@ use syn::{ #[proc_macro_derive(MsgOnSocket, attributes(msg_on_socket))] pub fn msg_on_socket_derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream { let input = parse_macro_input!(input as DeriveInput); - let impl_for_input = socket_msg_impl(input); + let impl_for_input = msg_socket_impl(input); impl_for_input.into() } -fn socket_msg_impl(input: DeriveInput) -> TokenStream { +fn msg_socket_impl(input: DeriveInput) -> TokenStream { if !input.generics.params.is_empty() { return quote! { - compile_error!("derive(SocketMsg) does not support generic parameters"); + compile_error!("derive(MsgSocket) does not support generic parameters"); }; } match input.data { @@ -38,16 +37,13 @@ fn socket_msg_impl(input: DeriveInput) -> TokenStream { } Data::Enum(de) => impl_for_enum(input.ident, de), _ => quote! { - compile_error!("derive(SocketMsg) only support struct and enum"); + compile_error!("derive(MsgSocket) only support struct and enum"); }, } } fn is_named_struct(ds: &DataStruct) -> bool { - match &ds.fields { - Fields::Named(_f) => true, - _ => false, - } + matches!(&ds.fields, Fields::Named(_)) } /************************** Named Struct Impls ********************************************/ @@ -612,9 +608,36 @@ fn write_to_buffer_and_move_offset(name: &Ident) -> TokenStream { #[cfg(test)] mod tests { - use crate::socket_msg_impl; + use super::define_uses_fd_for_enum; + use crate::msg_socket_impl; use quote::quote; - use syn::{parse_quote, DeriveInput}; + use syn::{parse_quote, Data, DeriveInput}; + + #[test] + fn simple_enum_uses_fd() { + let input: DeriveInput = parse_quote! { + enum Simple { + A, + B, + } + }; + + let data = match input.data { + Data::Enum(data) => data, + _ => unreachable!(), + }; + + let expected = quote! { + fn uses_fd() -> bool { + false + } + }; + + assert_eq!( + define_uses_fd_for_enum(&data).to_string(), + expected.to_string() + ); + } #[test] fn end_to_end_struct_test() { @@ -689,7 +712,7 @@ mod tests { }; - assert_eq!(socket_msg_impl(input).to_string(), expected.to_string()); + assert_eq!(msg_socket_impl(input).to_string(), expected.to_string()); } #[test] @@ -754,7 +777,7 @@ mod tests { } }; - assert_eq!(socket_msg_impl(input).to_string(), expected.to_string()); + assert_eq!(msg_socket_impl(input).to_string(), expected.to_string()); } #[test] @@ -863,7 +886,7 @@ mod tests { } }; - assert_eq!(socket_msg_impl(input).to_string(), expected.to_string()); + assert_eq!(msg_socket_impl(input).to_string(), expected.to_string()); } #[test] |