1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
use crate::;
/// An actor should implement this trait if it wants to handle messages.
/// An actor should implement this trait if it wants to handle messages from a stream.
///
/// ## Example:
/// ```
/// # use hannibal::prelude::*;
/// #[derive(Default, Actor)]
/// struct FizzBuzzer();
///
/// impl StreamHandler<i32> for FizzBuzzer {
/// async fn handle(&mut self, _ctx: &mut Context<Self>, msg: i32) {
/// match (msg % 3 == 0, msg % 5 == 0) {
/// (true, true) => println!("fizzbuzz"),
/// (true, false) => println!("fizz"),
/// (false, true) => println!("buzz"),
/// _ => {}
/// }
/// }
///
/// async fn finished(&mut self, ctx: &mut Context<Self>) {
/// ctx.stop().unwrap();
/// }
/// }
///
/// # #[hannibal::main]
/// # async fn main() {
/// let num_stream = futures::stream::iter(1..30);
/// let addr = hannibal::setup_actor(FizzBuzzer::default())
/// .on_stream(num_stream)
/// .spawn();
///
/// addr.await.unwrap();
/// # }
/// ```