name: add-actor description: Create a new actor with builder in the thin-edge.io actor framework. Use when implementing a new concurrent component that processes messages.
Create Actor with Builder
Steps
- Create a new Rust module under
crates/extensions - Define message types in
messages.rs:- All messages must implement
Message: Debug + Send + Sync + 'static - Request/response pairs for
Serverpattern, or input/output forActorpattern
- All messages must implement
- Use fan-in macro for multiple input message types:
fan_in_message_type!(CombinedMsg[MsgA, MsgB] : Clone, Debug); - Create actor struct with a message box field:
pub struct MyActor { message_box: SimpleMessageBox<InputMsg, OutputMsg>, // or: message_box: ServerMessageBox<Request, Response>, } - Implement
Actortrait:fn name(&self) -> &str— unique identifierasync fn run(self) -> Result<(), RuntimeError>— main message loop
- Create builder using appropriate message box builder:
SimpleMessageBoxBuilder— for event-driven actors (fire-and-forget)ServerMessageBoxBuilder— for request-response actors
- Implement builder traits:
Builder<MyActor>—fn try_build(self) -> Result<MyActor, ...>RuntimeRequestSink—fn get_signal_sender(&self) -> DynSender<RuntimeRequest>MessageSink<M>— for each input message typeMessageSource<M, Config>— for each output message type
- Wire into parent using builder methods:
builder.connect_sink(other_builder.get_sender()); builder.connect_source(other_builder); - Write tests using
SimpleMessageBoxBuildertest harnesses
Reference Files
Read these for patterns:
crates/core/tedge_actors/src/lib.rs— framework docs and all public APIcrates/extensions/tedge_timer_ext/— complete actor with server message box, builder, and testscrates/extensions/tedge_signal_ext/src/lib.rs— minimal actor with simple message boxdesign/thin-edge-actors-design.md— architecture and design rationale