linked_list_c_derive 0.1.0

Safely work with c compatible linked lists
Documentation
use proc_macro::TokenStream;
use quote::quote;
use syn;

#[allow(non_snake_case)]
#[proc_macro_derive(LlItem)]
pub fn LlItem_derive(input: TokenStream) -> TokenStream {
    let input = syn::parse_macro_input!(input as syn::DeriveInput);
    let name = input.ident;

    let expanded = quote! {
        impl linked_list_c::LlItem for #name {
            fn get_next(&self) -> *mut Self {
                self.next
            }
            fn set_next(&mut self, next: *mut Self) -> Option<*mut Self> {
                let old = self.next;
                self.next = next;
                if !old.is_null() {
                    Some(old)
                } else {
                    None
                }
            }
        }
    };
    TokenStream::from(expanded)
}