Skip to content

Commit 7dc7d5d

Browse files
committed
remove redundant RouterMessage<M>
1 parent c81a530 commit 7dc7d5d

28 files changed

+109
-113
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
- added `LeastMessageRouter`
44
- config now supports loading optional file `./config/tyra.toml` to overwrite config parameters
55
- defaults < `./config/tyra.toml` < environment variables
6+
- removed `RouterMessage<M>`
7+
- routers now support any user-defined message per default through a generic implementation
68

79
# 0.8.0
810

examples/benchmark_router_round_robin.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::error::Error;
22
use std::process::exit;
33
use std::time::{Duration, Instant};
44
use tyra::prelude::*;
5-
use tyra::router::{AddActorMessage, RoundRobinRouterFactory, RouterMessage};
5+
use tyra::router::{AddActorMessage, RoundRobinRouterFactory};
66

77
struct MessageA {}
88

@@ -195,7 +195,7 @@ fn main() {
195195
aggregator.send(Start {}).unwrap();
196196
for _i in 0..message_count {
197197
let msg = MessageA {};
198-
router.send(RouterMessage::new(msg)).unwrap();
198+
router.send(msg).unwrap();
199199
}
200200
let duration = start.elapsed();
201201
println!("It took {:?} to send {} messages", duration, message_count);

examples/benchmark_single_actor_process_after_send.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,6 @@ impl Handler<MessageA> for Benchmark {
6969

7070
fn main() {
7171
let actor_config = TyraConfig::new().unwrap();
72-
let test = actor_config.thread_pool.config.get("default").unwrap();
73-
let test = test.threads_max;
7472
let actor_system = ActorSystem::new(actor_config);
7573

7674
let message_count = 10000000;
@@ -86,8 +84,6 @@ fn main() {
8684
)
8785
.unwrap();
8886
println!("Actors have been created");
89-
println!("TEST: {}", actor.get_address().system);
90-
println!("TEST2: {}", test);
9187
let start = Instant::now();
9288

9389
actor.sleep(Duration::from_secs(3)).unwrap();

src/actor/actor_wrapper.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::actor::actor_address::ActorAddress;
22
use crate::actor::actor_send_error::ActorSendError;
33
use crate::actor::handler::Handler;
44
use crate::actor::mailbox::Mailbox;
5-
use crate::message::actor_message::ActorMessage;
5+
use crate::message::actor_message::BaseActorMessage;
66
use crate::message::actor_stop_message::ActorStopMessage;
77
use crate::message::sleep_message::SleepMessage;
88
use crate::prelude::Actor;
@@ -59,7 +59,7 @@ where
5959
pub fn send<M>(&self, msg: M) -> Result<(), ActorSendError>
6060
where
6161
A: Handler<M>,
62-
M: ActorMessage + 'static,
62+
M: BaseActorMessage + 'static,
6363
{
6464
if self.mailbox.is_stopped() {
6565
return Err(ActorSendError::AlreadyStoppedError);
@@ -82,7 +82,7 @@ where
8282
pub fn send_timeout<M>(&self, msg: M, timeout: Duration) -> Result<(), ActorSendError>
8383
where
8484
A: Handler<M>,
85-
M: ActorMessage + 'static,
85+
M: BaseActorMessage + 'static,
8686
{
8787
if self.mailbox.is_stopped() {
8888
return Err(ActorSendError::AlreadyStoppedError);
@@ -105,7 +105,7 @@ where
105105
pub fn send_after<M>(&self, msg: M, delay: Duration) -> Result<(), ActorSendError>
106106
where
107107
A: Handler<M> + 'static,
108-
M: ActorMessage + 'static,
108+
M: BaseActorMessage + 'static,
109109
{
110110
if self.mailbox.is_stopped() {
111111
return Err(ActorSendError::AlreadyStoppedError);

src/actor/executor.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::actor::actor_wrapper::ActorWrapper;
66
use crate::actor::context::ActorContext;
77
use crate::actor::handler::Handler;
88
use crate::actor::mailbox::Mailbox;
9-
use crate::message::actor_message::ActorMessage;
9+
use crate::message::actor_message::BaseActorMessage;
1010
use crate::message::envelope::{MessageEnvelope, MessageEnvelopeTrait};
1111
use crate::message::system_stop_message::SystemStopMessage;
1212
use crate::prelude::{Actor, ActorPanicSource, ActorResult};
@@ -251,7 +251,7 @@ where
251251
pub fn send<M>(&self, msg: M) -> Result<(), flume::SendTimeoutError<MessageEnvelope<A>>>
252252
where
253253
A: Handler<M>,
254-
M: ActorMessage + 'static,
254+
M: BaseActorMessage + 'static,
255255
{
256256
return self
257257
.mailbox

src/actor/handler.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::actor::actor::Actor;
22
use crate::actor::context::ActorContext;
3-
use crate::message::actor_message::ActorMessage;
3+
use crate::message::actor_message::BaseActorMessage;
44
use crate::message::actor_stop_message::ActorStopMessage;
55
use crate::message::sleep_message::SleepMessage;
66
use crate::message::system_stop_message::SystemStopMessage;
@@ -15,7 +15,7 @@ use std::error::Error;
1515
///
1616
/// ```rust
1717
/// use std::error::Error;
18-
/// use tyra::prelude::{TyraConfig, ActorSystem, ActorFactory, ActorContext, SerializedMessage, ActorMessage, Handler, Actor, ActorResult};
18+
/// use tyra::prelude::{TyraConfig, ActorSystem, ActorFactory, ActorContext, SerializedMessage, Handler, Actor, ActorResult, ActorMessage};
1919
///
2020
/// struct TestActor {}
2121
/// impl Actor for TestActor {}
@@ -32,7 +32,7 @@ use std::error::Error;
3232
pub trait Handler<M: ?Sized>
3333
where
3434
Self: Actor + Sized,
35-
M: ActorMessage,
35+
M: BaseActorMessage,
3636
{
3737
fn handle(
3838
&mut self,
@@ -71,7 +71,7 @@ impl<M, A> Handler<BulkActorMessage<M>> for A
7171
where
7272
Self: Actor + Sized,
7373
A: Handler<M>,
74-
M: ActorMessage,
74+
M: BaseActorMessage,
7575
{
7676
fn handle(
7777
&mut self,

src/actor/mailbox.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::actor::actor_send_error::ActorSendError;
22
use crate::actor::handler::Handler;
3-
use crate::message::actor_message::ActorMessage;
3+
use crate::message::actor_message::BaseActorMessage;
44
use crate::message::envelope::MessageEnvelope;
55
use crate::prelude::{Actor, SerializedMessage};
66
use std::any::Any;
@@ -58,7 +58,7 @@ where
5858
pub fn send<M>(&self, msg: M) -> Result<(), ActorSendError>
5959
where
6060
A: Handler<M>,
61-
M: ActorMessage + 'static,
61+
M: BaseActorMessage + 'static,
6262
{
6363
let result = self.msg_in.send(MessageEnvelope::new(msg));
6464
if result.is_ok() {
@@ -71,7 +71,7 @@ where
7171
pub fn send_timeout<M>(&self, msg: M, timeout: Duration) -> Result<(), ActorSendError>
7272
where
7373
A: Handler<M>,
74-
M: ActorMessage + 'static,
74+
M: BaseActorMessage + 'static,
7575
{
7676
let result = self.msg_in.send_timeout(MessageEnvelope::new(msg), timeout);
7777
if result.is_ok() {

src/config/tyra_config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::path::Path;
22
use crate::config::global_config::GeneralConfig;
33
use crate::config::pool_config::PoolConfig;
44

5-
use config::{Config, ConfigError, Environment, File, FileFormat};
5+
use config::{Config, ConfigError, File, FileFormat};
66
use serde::{Deserialize, Serialize};
77

88
pub const DEFAULT_POOL: &str = "default";

src/message/actor_init_message.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::message::actor_message::ActorMessage;
1+
use crate::prelude::ActorMessage;
22

33
/// Can be implemented by an Actor through Handler<ActorInitMessage> to be used to init an Actor
44
pub struct ActorInitMessage {}
@@ -9,4 +9,5 @@ impl ActorInitMessage {
99
}
1010
}
1111

12+
/// intentionally implements `ActorMessage`, because it does NOT provide a generic `Handler<ActorInitMessage>` implementation
1213
impl ActorMessage for ActorInitMessage {}

src/message/actor_message.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,25 @@
1+
/// This trait is used internally by the `ActorSystem` and builds the base for all messaging
2+
/// It's automatically implemented by the `ActorMessage` trait that should be used
3+
///
4+
/// It is used by Messages defined in the system
5+
/// All messages that use this trait directly should also implement a dynamic `Handler<M>` that applies to any `Actor`
6+
pub trait BaseActorMessage: Send + Sync {
7+
}
8+
9+
/// This trait is used by Messages defined by the system
10+
/// All messages that use this trait should also implement a dynamic `Handler<M>` that applies to any `Actor`
11+
pub trait DefaultActorMessage: Send + Sync {
12+
/// returns the message id
13+
fn get_id(&self) -> usize {
14+
return 0;
15+
}
16+
}
17+
18+
impl<A> BaseActorMessage for A
19+
where
20+
A: DefaultActorMessage
21+
{}
22+
123
/// Core trait to define Messages
224
///
325
/// # Examples
@@ -16,3 +38,9 @@ pub trait ActorMessage: Send + Sync {
1638
return 0;
1739
}
1840
}
41+
42+
/// this should be `BaseActorMessage` but it's currently not possible because of https://github.com/rust-lang/rust/issues/20400
43+
impl<A> DefaultActorMessage for A
44+
where
45+
A: ActorMessage
46+
{}

0 commit comments

Comments
 (0)