Add kameo-streams example
This commit is contained in:
parent
841b9ebacb
commit
a5f7f6c45e
48
Cargo.lock
generated
48
Cargo.lock
generated
@ -164,7 +164,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"futures",
|
"futures",
|
||||||
"kameo",
|
"kameo 0.12.2",
|
||||||
"tokio",
|
"tokio",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -233,7 +233,24 @@ dependencies = [
|
|||||||
"dyn-clone",
|
"dyn-clone",
|
||||||
"futures",
|
"futures",
|
||||||
"itertools",
|
"itertools",
|
||||||
"kameo_macros",
|
"kameo_macros 0.12.2",
|
||||||
|
"once_cell",
|
||||||
|
"serde",
|
||||||
|
"tokio",
|
||||||
|
"tokio-stream",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "kameo"
|
||||||
|
version = "0.13.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "62237a96597618543798a36ec723eb75c5ac301e2690243fd600be1f5eb3dd2d"
|
||||||
|
dependencies = [
|
||||||
|
"dyn-clone",
|
||||||
|
"futures",
|
||||||
|
"itertools",
|
||||||
|
"kameo_macros 0.13.0",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"serde",
|
"serde",
|
||||||
"tokio",
|
"tokio",
|
||||||
@ -245,7 +262,7 @@ dependencies = [
|
|||||||
name = "kameo-actors"
|
name = "kameo-actors"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"kameo",
|
"kameo 0.12.2",
|
||||||
"tokio",
|
"tokio",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -254,11 +271,21 @@ name = "kameo-delegate-forward"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures",
|
"futures",
|
||||||
"kameo",
|
"kameo 0.12.2",
|
||||||
"rand",
|
"rand",
|
||||||
"tokio",
|
"tokio",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "kameo-streams"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"futures",
|
||||||
|
"kameo 0.13.0",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kameo_macros"
|
name = "kameo_macros"
|
||||||
version = "0.12.2"
|
version = "0.12.2"
|
||||||
@ -272,6 +299,19 @@ dependencies = [
|
|||||||
"uuid",
|
"uuid",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "kameo_macros"
|
||||||
|
version = "0.13.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5bbbd8e8d7b02bc67eae0dcbdb82c0a71cc7cc61734059ee3e7439a1ee1e0e85"
|
||||||
|
dependencies = [
|
||||||
|
"heck",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
"uuid",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.161"
|
version = "0.2.161"
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
[workspace]
|
[workspace]
|
||||||
resolver = "2"
|
resolver = "2"
|
||||||
members = ["alpha", "futures-unordered", "kameo-actors", "kameo-delegate-forward", "my-actors"]
|
members = ["alpha", "futures-unordered", "kameo-actors", "kameo-delegate-forward", "kameo-streams", "my-actors"]
|
||||||
|
10
kameo-streams/Cargo.toml
Normal file
10
kameo-streams/Cargo.toml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[package]
|
||||||
|
name = "kameo-streams"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
anyhow = "1.0.93"
|
||||||
|
futures = "0.3.31"
|
||||||
|
kameo = "0.13.0"
|
||||||
|
tokio = { version = "1.41.1", features = ["full"] }
|
51
kameo-streams/src/main.rs
Normal file
51
kameo-streams/src/main.rs
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
use anyhow::Result;
|
||||||
|
use futures::channel::oneshot::{self, Sender};
|
||||||
|
use kameo::message::{Context, Message, StreamMessage};
|
||||||
|
|
||||||
|
#[derive(kameo::Actor)]
|
||||||
|
struct MyActor;
|
||||||
|
|
||||||
|
impl Message<StreamMessage<Sender<u32>, (), ()>> for MyActor {
|
||||||
|
type Reply = ();
|
||||||
|
|
||||||
|
async fn handle(
|
||||||
|
&mut self,
|
||||||
|
msg: StreamMessage<Sender<u32>, (), ()>,
|
||||||
|
_: Context<'_, Self, Self::Reply>,
|
||||||
|
) -> Self::Reply {
|
||||||
|
match msg {
|
||||||
|
StreamMessage::Next(ch) => {
|
||||||
|
println!("Received item!");
|
||||||
|
let _ = ch.send(2137);
|
||||||
|
}
|
||||||
|
StreamMessage::Started(()) => {
|
||||||
|
println!("Stream attached!");
|
||||||
|
}
|
||||||
|
StreamMessage::Finished(()) => {
|
||||||
|
println!("Stream finished!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() -> Result<()> {
|
||||||
|
let (ch1_snd, ch1_rcv) = oneshot::channel::<u32>();
|
||||||
|
let (ch2_snd, ch2_rcv) = oneshot::channel::<u32>();
|
||||||
|
let (ch3_snd, ch3_rcv) = oneshot::channel::<u32>();
|
||||||
|
|
||||||
|
let stream = futures::stream::iter(vec![ch1_snd, ch2_snd, ch3_snd]);
|
||||||
|
|
||||||
|
let actor_ref = kameo::spawn(MyActor);
|
||||||
|
let _ = actor_ref
|
||||||
|
.attach_stream(stream, (), ())
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
println!("{}", ch1_rcv.await.unwrap());
|
||||||
|
println!("{}", ch2_rcv.await.unwrap());
|
||||||
|
println!("{}", ch3_rcv.await.unwrap());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user