gen_server: type Timer + handle_timer/handle_idle; fold control into Sys channel (RFC 015 §4.5, §6)

This commit is contained in:
smarm-agent
2026-06-18 18:54:24 +00:00
parent 47d75d1ead
commit 57eadb5c6c
3 changed files with 94 additions and 32 deletions
+9 -3
View File
@@ -27,6 +27,7 @@ impl GenServer for Counter {
type Reply = i64;
type Cast = Op;
type Info = ();
type Timer = ();
fn handle_call(&mut self, req: Req) -> i64 {
match req {
@@ -70,8 +71,9 @@ impl GenServer for Lifecycle {
type Reply = ();
type Cast = ();
type Info = ();
type Timer = ();
fn init(&mut self, _ctx: &smarm::gen_server::ServerCtx) {
fn init(&mut self, _ctx: &smarm::gen_server::ServerCtx<Self>) {
self.log.lock().unwrap().push("init");
}
@@ -154,6 +156,7 @@ impl GenServer for Slow {
type Reply = u64;
type Cast = ();
type Info = ();
type Timer = ();
fn handle_call(&mut self, delay_ms: u64) -> u64 {
if delay_ms > 0 {
@@ -210,6 +213,7 @@ fn call_timeout_to_dead_server_is_server_down_not_timeout() {
impl GenServer for Bomb {
type Call = ();
type Info = ();
type Timer = ();
type Reply = ();
type Cast = ();
fn handle_call(&mut self, _: ()) {
@@ -248,6 +252,7 @@ impl GenServer for Logger {
type Reply = Vec<&'static str>;
type Cast = ();
type Info = &'static str;
type Timer = ();
fn handle_call(&mut self, _: ()) -> Vec<&'static str> {
self.log.clone()
@@ -350,7 +355,7 @@ use smarm::{monitor, spawn, DownReason, Pid};
/// The motivating pattern: a server that spawns workers from a handler,
/// watches them, and logs their deaths.
struct Pool {
watcher: Option<Watcher>,
watcher: Option<Watcher<Self>>,
log: Vec<DownReason>,
}
@@ -364,8 +369,9 @@ impl GenServer for Pool {
type Reply = Vec<DownReason>;
type Cast = PoolCast;
type Info = ();
type Timer = ();
fn init(&mut self, ctx: &smarm::gen_server::ServerCtx) {
fn init(&mut self, ctx: &smarm::gen_server::ServerCtx<Self>) {
self.watcher = Some(ctx.watcher());
}