diff --git a/Cargo.toml b/Cargo.toml index bc7509f..244616f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "derive-aktor" -version = "0.1.6" +version = "0.2.0" authors = ["insanitybit "] edition = "2018" description = "Create actors in rust with a derive macro" @@ -15,17 +15,15 @@ proc-macro = true quote = "1.0" futures = "0.3" async-trait = "0.1" -aktors = "0.2.7" +aktors = "0" -uuid = {version="0.8.1", features=["v4"]} -tracing = "0.1.15" -tracing-futures = "0.2.4" -tracing-subscriber = "0.2.5" +uuid = { version="0.8", features=["v4"] } +tracing = "0" [dependencies.tokio] version = "0.2" features = ["full"] [dependencies.syn] -version = "1.0.*" +version = "1" features = ['full'] diff --git a/src/bin/ex.rs b/src/bin/ex.rs index 29dd9d9..a13d2c6 100644 --- a/src/bin/ex.rs +++ b/src/bin/ex.rs @@ -6,19 +6,16 @@ extern crate tokio; use std::collections::HashMap; use std::hash::Hash; -use tokio::runtime::Runtime; -use tokio::sync::mpsc::{channel, Receiver, Sender}; +use tokio::sync::mpsc::{channel, Sender}; use async_trait::async_trait; use derive_aktor::derive_actor; -use tracing::info; -use std::sync::Arc; -use std::sync::atomic::{AtomicUsize, Ordering}; use std::fmt::Debug; -use std::time::Duration; +use tracing::info; pub struct KeyValueStore - where U: Hash + Debug + Eq + Send + Sync + 'static +where + U: Hash + Debug + Eq + Send + Sync + 'static, { inner_store: HashMap, self_actor: Option>, @@ -50,17 +47,13 @@ impl KeyValueStore { panic!(value); } - async fn on_error( - &mut self, - panicked_with: Box, - ) { + async fn on_error(&mut self, panicked_with: Box) { if let Some(e) = panicked_with.downcast_ref::>() { dbg!(e); } } } - // pub struct ApiWrapper // { // inner_store: KeyValueStoreActor<&'static str>, @@ -103,11 +96,15 @@ async fn main() { // // .with_env_filter(filter) // .init(); - let (kv_store, kv_store_handle) = KeyValueStoreActor::new(KeyValueStore::new()).await; + let (kv_store, _kv_store_handle) = KeyValueStoreActor::new(KeyValueStore::new()).await; - kv_store.query("foo", Box::new(|value| info!("before {:?}", value))).await; + kv_store + .query("foo", Box::new(|value| info!("before {:?}", value))) + .await; kv_store.set("foo", "bar".to_owned()).await; - kv_store.query("foo", Box::new(|value| info!("after {:?}", value))).await; + kv_store + .query("foo", Box::new(|value| info!("after {:?}", value))) + .await; // // let (api, api_handle) = ApiWrapperActor::new(ApiWrapper::new(kv_store.clone())).await; // @@ -122,14 +119,13 @@ async fn main() { dbg!("done"); } - #[cfg(test)] mod tests { use super::*; #[derive(Default)] pub struct Ping { - self_actor: Option + self_actor: Option, } #[derive_actor] @@ -142,7 +138,7 @@ mod tests { #[derive(Default)] pub struct Pong { - self_actor: Option + self_actor: Option, } #[derive_actor] @@ -159,7 +155,6 @@ mod tests { ping_handle.await; } - // Given two actors that temporarily cycle, ensure that they eventually terminate #[tokio::test] async fn test_cycle_termination() { @@ -170,4 +165,4 @@ mod tests { pong_handle.await; ping_handle.await; } -} \ No newline at end of file +} diff --git a/src/lib.rs b/src/lib.rs index 80d6e44..1b0babc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,19 +12,21 @@ extern crate futures; use proc_macro::TokenStream; -use quote::{TokenStreamExt, ToTokens}; -use syn::{ImplItem, Visibility, FnArg}; +use quote::{ToTokens, TokenStreamExt}; +use syn::{FnArg, ImplItem, Visibility}; use futures::channel::mpsc::{channel, Receiver, Sender}; use syn::punctuated::Punctuated; -use syn::GenericParam; use syn::token::Comma; - +use syn::GenericParam; #[proc_macro_attribute] -pub fn derive_actor(args: TokenStream, item: TokenStream) -> TokenStream -{ - let on_error = args.clone().into_iter().find(|arg| &arg.to_string() == "on_error").is_some(); +pub fn derive_actor(args: TokenStream, item: TokenStream) -> TokenStream { + let on_error = args + .clone() + .into_iter() + .find(|arg| &arg.to_string() == "on_error") + .is_some(); let o_item = item.clone(); let input: syn::ItemImpl = syn::parse_macro_input!(item as syn::ItemImpl); let o_input: syn::ItemImpl = syn::parse_macro_input!(o_item as syn::ItemImpl); @@ -56,7 +58,7 @@ pub fn derive_actor(args: TokenStream, item: TokenStream) -> TokenStream let all_generics = all_generics(items.clone(), o_input.clone()); let all_generic_tys = all_generic_tys(items.clone(), o_input.clone()); -// let generics_tuple = all_generic_tys_tuple(items.clone(), o_input.clone()); + // let generics_tuple = all_generic_tys_tuple(items.clone(), o_input.clone()); let message_variants = gen_message_variants(items.clone()); @@ -85,7 +87,6 @@ pub fn derive_actor(args: TokenStream, item: TokenStream) -> TokenStream } } - let actor_method = quote!( // #[tracing::instrument(skip(self, #args))] @@ -178,7 +179,7 @@ pub fn derive_actor(args: TokenStream, item: TokenStream) -> TokenStream } let route_msg = if on_error { - quote!{ + quote! { async fn route_message(&mut self, message: #message_ty #all_generic_tys ) { let route_f = async { match message { @@ -194,7 +195,7 @@ pub fn derive_actor(args: TokenStream, item: TokenStream) -> TokenStream } } } else { - quote!{ + quote! { async fn route_message(&mut self, message: #message_ty #all_generic_tys ) { match message { #route_arms @@ -358,18 +359,16 @@ fn gen_message_variants(items: Vec) -> impl quote::ToTokens { FnArg::Receiver(_) => { continue; } - arg => args.extend(quote!(#arg, )) + arg => args.extend(quote!(#arg, )), } } - let variant = quote!( #ident { #args }, ); - message_variants.extend(variant); } } @@ -403,7 +402,6 @@ fn all_generics(items: Vec, item_impl: syn::ItemImpl) -> impl quote::T all_generics } - fn all_generic_tys(items: Vec, item_impl: syn::ItemImpl) -> impl quote::ToTokens { let impl_generics = item_impl.generics; @@ -460,14 +458,12 @@ fn all_generic_tys_tuple(items: Vec, item_impl: syn::ItemImpl) -> impl } } -// tuple_type.elems.push(syn::Type::Verbatim(quote!(#ty_generics))); + // tuple_type.elems.push(syn::Type::Verbatim(quote!(#ty_generics))); let tuple_type = quote!(#tuple_type); - tuple_type } - fn method_generics(items: Vec) -> impl quote::ToTokens { let mut generic_types = quote!(); for item in items { @@ -484,7 +480,6 @@ fn method_generics(items: Vec) -> impl quote::ToTokens { generic_types } - fn method_generic_tys(items: Vec) -> impl quote::ToTokens { let mut generic_types = quote!(); for item in items { @@ -497,7 +492,7 @@ fn method_generic_tys(items: Vec) -> impl quote::ToTokens { } } -// println!("{}", generic_types.to_string()); + // println!("{}", generic_types.to_string()); generic_types }