//! Handler vtable. Mirrors charmbracelet/ssh.Handler — a function invoked once //! per accepted session, after the channel has been opened and a shell/exec //! request received. //! //! Middleware composition lives in dream/Middleware.zig (Phase 2). const Handler = @This(); const Session = @import("Session.zig"); ctx: ?*anyopaque = null, handle: *const fn (ctx: ?*anyopaque, sess: *Session) anyerror!void, pub fn call(self: Handler, sess: *Session) anyerror!void { return self.handle(self.ctx, sess); }