Skip to content

refactor(trogon-nats): align JetStream trait signatures with async_nats#73

Merged
yordis merged 1 commit into
mainfrom
refactor/align-jetstream-trait-signatures
Mar 31, 2026
Merged

refactor(trogon-nats): align JetStream trait signatures with async_nats#73
yordis merged 1 commit into
mainfrom
refactor/align-jetstream-trait-signatures

Conversation

@yordis

@yordis yordis commented Mar 31, 2026

Copy link
Copy Markdown
Member

Summary

  • JetStreamContext::get_or_create_stream now takes S: Into<stream::Config> + Send instead of concrete stream::Config, matching async_nats
  • JetStreamPublisher::js_publish_with_headers now takes S: ToSubject + Send instead of String, matching async_nats
  • JetStreamConsumerFactory::create_consumer left unchanged — it composes two async_nats calls (get_stream + create_consumer) which is an intentional abstraction

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
@cursor

cursor Bot commented Mar 31, 2026

Copy link
Copy Markdown

PR Summary

Medium Risk
Changes public JetStreamContext/JetStreamPublisher trait method signatures, which can break downstream implementations/call sites and subtly affect type inference, but behavior remains effectively the same.

Overview
Aligns trogon-nats JetStream traits and implementations with async_nats by making JetStreamContext::get_or_create_stream accept S: Into<stream::Config> and JetStreamPublisher::js_publish_with_headers accept S: ToSubject instead of concrete stream::Config/String.

Updates the real client, mocks, and acp-nats test support to the new generic signatures (including converting ToSubject into a stored String in the publisher mock) and adjusts a unit test call site accordingly.

Written by Cursor Bugbot for commit a0c4254. This will update automatically on new commits. Configure here.

@coderabbitai

coderabbitai Bot commented Mar 31, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1d9ae8cd-beee-4eaf-ab83-be011440b78f

📥 Commits

Reviewing files that changed from the base of the PR and between 3713f05 and a0c4254.

📒 Files selected for processing (4)
  • rsworkspace/crates/acp-nats/src/agent/test_support.rs
  • rsworkspace/crates/trogon-nats/src/jetstream/client.rs
  • rsworkspace/crates/trogon-nats/src/jetstream/mocks.rs
  • rsworkspace/crates/trogon-nats/src/jetstream/traits.rs

Walkthrough

This PR generalizes NATS JetStream trait method signatures to accept flexible input types instead of concrete ones. The js_publish_with_headers method now accepts any type implementing ToSubject instead of String, and get_or_create_stream accepts types implementing Into<stream::Config> instead of concrete stream::Config. Changes are applied consistently across trait definitions and all implementations.

Changes

Cohort / File(s) Summary
Trait Definitions
rsworkspace/crates/trogon-nats/src/jetstream/traits.rs
Updated trait method signatures for get_or_create_stream and js_publish_with_headers to accept generic types with bounds (S: Into<stream::Config> and S: ToSubject respectively). Updated () impl and test callsites to match new generic parameters.
Client Implementations
rsworkspace/crates/trogon-nats/src/jetstream/client.rs
Updated NatsJetStreamClient trait implementations for both methods to accept generic types, forwarding them to underlying context methods with implicit conversions.
Mock Implementations
rsworkspace/crates/trogon-nats/src/jetstream/mocks.rs
Updated MockJetStreamContext and MockJetStreamPublisher to accept generic types, converting them internally via into() and to_subject().to_string() before recording/publishing.
Test Support Mocks
rsworkspace/crates/acp-nats/src/agent/test_support.rs
Updated MockJs implementation of js_publish_with_headers to accept generic subject type with ToSubject + Send bound, delegating to underlying publisher.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

  • TrogonStack/trogonai#6 — Directly modifies the same JetStream publish method signatures to use generic S: ToSubject + Send across trait definitions and implementations.

Poem

🐰 Generics bloom in bounded grace,
From String to ToSubject's embrace,
Flexible subjects now take their place,
With Into<Config> adding more space!
A hop-skip of refactoring done,
More flexible traits, such fun!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 14.29% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'refactor(trogon-nats): align JetStream trait signatures with async_nats' accurately describes the main objective of the PR—aligning trait signatures with async_nats library conventions.
Description check ✅ Passed The description clearly details the specific changes made to JetStream trait signatures and explains the rationale for leaving JetStreamConsumerFactory::create_consumer unchanged.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/align-jetstream-trait-signatures

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions

Copy link
Copy Markdown

badge

Code Coverage Summary

Details
Filename                                                     Stmts    Miss  Cover    Missing
---------------------------------------------------------  -------  ------  -------  ---------------------------------------------------------------------------------------------
crates/trogon-std/src/fs/mem.rs                                220      10  95.45%   61-63, 77-79, 133-135, 158
crates/trogon-std/src/fs/system.rs                              29      12  58.62%   17-19, 31-45
crates/acp-nats-agent/src/connection.rs                       1356       9  99.34%   472, 669-671, 678, 1826-1827, 1840-1841
crates/acp-nats/src/client/mod.rs                             2981       0  100.00%
crates/acp-nats/src/client/request_permission.rs               338       0  100.00%
crates/acp-nats/src/client/terminal_kill.rs                    309       0  100.00%
crates/acp-nats/src/client/ext.rs                              365       8  97.81%   193-204, 229-240
crates/acp-nats/src/client/fs_write_text_file.rs               451       0  100.00%
crates/acp-nats/src/client/rpc_reply.rs                         71       0  100.00%
crates/acp-nats/src/client/ext_session_prompt_response.rs      150       0  100.00%
crates/acp-nats/src/client/fs_read_text_file.rs                384       0  100.00%
crates/acp-nats/src/client/session_update.rs                    55       0  100.00%
crates/acp-nats/src/client/terminal_create.rs                  294       0  100.00%
crates/acp-nats/src/client/terminal_release.rs                 357       0  100.00%
crates/acp-nats/src/client/terminal_output.rs                  223       0  100.00%
crates/acp-nats/src/client/terminal_wait_for_exit.rs           396       0  100.00%
crates/trogon-std/src/args.rs                                   10       0  100.00%
crates/trogon-std/src/json.rs                                   30       0  100.00%
crates/acp-telemetry/src/trace.rs                               32       4  87.50%   23-24, 31-32
crates/acp-telemetry/src/lib.rs                                153      22  85.62%   39-46, 81, 86, 91, 105-120
crates/acp-telemetry/src/metric.rs                              35       4  88.57%   30-31, 38-39
crates/acp-telemetry/src/log.rs                                 70       2  97.14%   39-40
crates/acp-telemetry/src/signal.rs                               3       3  0.00%    4-43
crates/acp-telemetry/src/service_name.rs                        16       0  100.00%
crates/acp-nats/src/config.rs                                  201       0  100.00%
crates/acp-nats/src/in_flight_slot_guard.rs                     32       0  100.00%
crates/acp-nats/src/error.rs                                    84       0  100.00%
crates/acp-nats/src/lib.rs                                      73       0  100.00%
crates/acp-nats/src/client_proxy.rs                            196       0  100.00%
crates/acp-nats/src/ext_method_name.rs                          85       0  100.00%
crates/acp-nats/src/pending_prompt_waiters.rs                  112       0  100.00%
crates/acp-nats/src/jsonrpc.rs                                   6       0  100.00%
crates/acp-nats/src/session_id.rs                               88       0  100.00%
crates/acp-nats/src/acp_prefix.rs                               63       0  100.00%
crates/acp-nats/src/nats/parsing.rs                            280       1  99.64%   151
crates/acp-nats/src/nats/extensions.rs                           3       0  100.00%
crates/acp-nats/src/nats/token.rs                                8       0  100.00%
crates/acp-nats/src/nats/subjects.rs                           294       0  100.00%
crates/acp-nats/src/telemetry/metrics.rs                        65       0  100.00%
crates/trogon-std/src/env/in_memory.rs                          81       0  100.00%
crates/trogon-std/src/env/system.rs                             17       0  100.00%
crates/trogon-std/src/time/mock.rs                             123       0  100.00%
crates/trogon-std/src/time/system.rs                            24       0  100.00%
crates/acp-nats/src/agent/set_session_config_option.rs          76       0  100.00%
crates/acp-nats/src/agent/test_support.rs                      267       0  100.00%
crates/acp-nats/src/agent/authenticate.rs                       52       0  100.00%
crates/acp-nats/src/agent/new_session.rs                        91       0  100.00%
crates/acp-nats/src/agent/list_sessions.rs                      50       0  100.00%
crates/acp-nats/src/agent/set_session_mode.rs                   79       0  100.00%
crates/acp-nats/src/agent/set_session_model.rs                  76       0  100.00%
crates/acp-nats/src/agent/bridge.rs                            142      13  90.85%   171-183
crates/acp-nats/src/agent/close_session.rs                      72       0  100.00%
crates/acp-nats/src/agent/mod.rs                                61       0  100.00%
crates/acp-nats/src/agent/prompt.rs                           1085       2  99.82%   144, 301
crates/acp-nats/src/agent/js_request.rs                        296       0  100.00%
crates/acp-nats/src/agent/resume_session.rs                    113       0  100.00%
crates/acp-nats/src/agent/fork_session.rs                      117       0  100.00%
crates/acp-nats/src/agent/ext_method.rs                         92       0  100.00%
crates/acp-nats/src/agent/ext_notification.rs                   88       0  100.00%
crates/acp-nats/src/agent/initialize.rs                         82       0  100.00%
crates/acp-nats/src/agent/load_session.rs                      114       0  100.00%
crates/acp-nats/src/agent/cancel.rs                            104       0  100.00%
crates/acp-nats-ws/src/main.rs                                 157       2  98.73%   84, 247
crates/acp-nats-ws/src/config.rs                                83       0  100.00%
crates/acp-nats-ws/src/connection.rs                           162      35  78.40%   71-78, 83-94, 110, 112-113, 118, 129-131, 138, 142, 146, 149-157, 168, 172, 175, 178-182, 216
crates/acp-nats-ws/src/upgrade.rs                               57       2  96.49%   59, 90
crates/acp-nats/src/jetstream/provision.rs                      58       0  100.00%
crates/acp-nats/src/jetstream/ext_policy.rs                     26       0  100.00%
crates/acp-nats/src/jetstream/streams.rs                       252       0  100.00%
crates/acp-nats/src/jetstream/consumers.rs                      76       0  100.00%
crates/acp-nats-stdio/src/main.rs                              113      11  90.27%   58, 106-113, 119-121, 138
crates/acp-nats-stdio/src/config.rs                             72       0  100.00%
crates/trogon-nats/src/jetstream/mocks.rs                      440       0  100.00%
crates/trogon-nats/src/jetstream/traits.rs                      96       0  100.00%
crates/trogon-std/src/dirs/fixed.rs                             84       0  100.00%
crates/trogon-std/src/dirs/system.rs                            98      11  88.78%   57, 65, 67, 75, 77, 85, 87, 96, 98, 109, 154
crates/trogon-nats/src/mocks.rs                                304       0  100.00%
crates/trogon-nats/src/messaging.rs                            528       2  99.62%   132, 142
crates/trogon-nats/src/connect.rs                               96      16  83.33%   22-24, 37, 49, 68-151
crates/trogon-nats/src/client.rs                                25      25  0.00%    50-89
crates/trogon-nats/src/auth.rs                                 114       3  97.37%   45-47
TOTAL                                                        16061     197  98.77%

Diff against main

Filename                                     Stmts    Miss  Cover
-----------------------------------------  -------  ------  --------
crates/trogon-nats/src/jetstream/mocks.rs       +5       0  +100.00%
TOTAL                                           +5       0  +0.00%

Results for commit: a0c4254

Minimum allowed coverage is 95%

♻️ This comment has been updated with latest results

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