summary refs log tree commit diff
path: root/msg_socket/msg_on_socket_derive/msg_on_socket_derive.rs
diff options
context:
space:
mode:
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.rs51
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]