actr-framework
Actor-RTC core programming interface layer - defines the contract for user-framework interaction.
Architectural Positioning
actr-framework is the SDK interface layer of the actr system, positioned in the middle tier:
User Application (Workload implementation)
↓ depends on
actr-framework (this crate) ← Stable API contract (trait definitions only)
↓ depends on
actr-protocol ← Data type definitions
↑ implements
actr-runtime ← Runtime implementation (implements Context trait)
Core Responsibilities
- Define user programming interface:
Workload,MessageDispatchertraits - Define execution context interface:
Contexttrait (implemented by runtime) - Type-safe RPC:
Context::call()andContext::tell()methods - Lifecycle management:
on_start,on_stophooks
Design Principles
1. Interface-only, Zero Implementation
// ✅ Framework defines
// ✅ Runtime implements
Framework contains no implementation code, all logic is in runtime.
2. Dependency Inversion Principle
- Framework defines traits, Runtime implements traits
- User code only depends on framework, not runtime
- Context trait can be mocked for unit testing
3. Zero-Cost Abstraction
- Use generics instead of trait objects (
<C: Context>not&dyn Context) - Compile-time monomorphization, static dispatch
- Compiler can fully inline the entire call chain
- Zero virtual function call overhead
Core Type System
4-Trait Architecture
actr builds a type-safe message handling system with 4 traits:
┌─────────────────────────────────────────────────────────┐
│ 1. RpcRequest trait (actr-protocol) │
│ - Associates Request and Response types │
│ - Provides route_key() static method │
└─────────────────────────────────────────────────────────┘
↓ used by
┌─────────────────────────────────────────────────────────┐
│ 2. Concrete Handler trait (code generated) │
│ - e.g., EchoServiceHandler<C: Context> │
│ - async fn echo<C: Context>(&self, req, ctx: &C) │
└─────────────────────────────────────────────────────────┘
↓ wrapped by
┌─────────────────────────────────────────────────────────┐
│ 3. MessageDispatcher trait (this crate) │
│ - Static routing: route_key → handler method │
│ - Zero-sized type (ZST), zero runtime overhead │
└─────────────────────────────────────────────────────────┘
↓ associated with
┌─────────────────────────────────────────────────────────┐
│ 4. Workload trait (this crate) │
│ - Associates Dispatcher type │
│ - Provides on_start(), on_stop() hooks │
└─────────────────────────────────────────────────────────┘
Usage Example
use ;
// Code-generated Handler trait
// User implements business logic