Skip to content

Conversation

@unbalancedparentheses
Copy link

Summary

Update the blocking_genserver example to demonstrate the new Backend enum:

  • Import Backend from tasks module
  • Use start_with_backend(Backend::Thread) for blocking actors
  • Use start_with_backend(Backend::Async) for async actors
  • Add detailed documentation explaining when to use each backend
  • Improve code comments explaining the blocking actor problem

Depends on: PR #99 (Documentation)

Test plan

  • All 90 tests pass
  • Clippy passes with no warnings
  • Cargo check passes

🤖 Generated with Claude Code

unbalancedparentheses and others added 14 commits January 8, 2026 02:23
Rename types from Erlang-style names to more accessible, universal terminology
as specified in ROADMAP.md.

Type renames:
- GenServer → Actor
- GenServerHandle<G> → ActorRef<A>
- CallMsg → Request
- CastMsg → Message
- OutMsg → Reply
- CallResponse → RequestResult
- CastResponse → MessageResult
- InfoResponse → InfoResult
- GenServerError → ActorError
- GenServerInMsg → ActorInMsg

Method renames:
- handle_call → handle_request
- handle_cast → handle_message

Error variant renames:
- CallMsgUnused → RequestUnused
- CastMsgUnused → MessageUnused
- CallTimeout → RequestTimeout

File renames:
- gen_server.rs → actor.rs (in both tasks/ and threads/ modules)

This is a breaking change that affects the public API but makes the library
more accessible to developers unfamiliar with Erlang/OTP terminology.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add Backend enum to allow explicit selection of how an Actor is spawned:
- Async: Run on the async runtime (tokio tasks) - cooperative multitasking
- Blocking: Run on blocking thread pool (spawn_blocking) - for blocking I/O
- Thread: Run on dedicated OS thread - for long-running singletons

Add start_with_backend(backend: Backend) method to Actor trait that
provides a unified API for runtime selection. Existing start(),
start_blocking(), and start_on_thread() methods remain as convenience
aliases.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add helper methods and extract common patterns:

- Add RestartType::should_restart() method to determine if a child
  should be restarted based on exit reason
- Extract RestartIntensityTracker struct to track restart frequency
  and prevent restart storms
- Add ChildSpec::new_with_type() helper to reduce code duplication
  between worker() and supervisor() constructors
- Export RestartIntensityTracker from crate root

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add comprehensive tests for the new supervisor helper functionality:

- test_restart_type_should_restart_permanent: verify Permanent always restarts
- test_restart_type_should_restart_transient: verify Transient only restarts on crash
- test_restart_type_should_restart_temporary: verify Temporary never restarts
- test_restart_intensity_tracker_basic: verify restart counting and limiting
- test_restart_intensity_tracker_reset: verify reset clears recorded restarts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add comprehensive tests for the Backend enum traits and variants:

- test_backend_default: verify Async is the default
- test_backend_copy: verify Copy semantics work correctly
- test_backend_clone: verify Clone trait implementation
- test_backend_debug: verify Debug formatting for all variants
- test_backend_equality: verify PartialEq and Eq implementations
- test_backend_variants_exhaustive: verify all variants can be matched

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add detailed documentation for the Backend enum including:

- Comparison table showing execution model, best use cases, and limitations
- "When to Use Each Backend" guide with specific recommendations
- "Avoid when" warnings for each backend
- Code examples showing all backend selection methods
- Enhanced per-variant documentation with detailed explanations

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update the blocking_genserver example to demonstrate the new Backend enum:

- Import Backend from tasks module
- Use start_with_backend(Backend::Thread) for blocking actors
- Use start_with_backend(Backend::Async) for async actors
- Add detailed documentation explaining when to use each backend
- Improve code comments explaining the blocking actor problem

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@unbalancedparentheses
Copy link
Author

Closing: This PR was based on a diverged fork. The changes have been reorganized into PRs #102 and #103 for proper sequencing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant