Skip to content

The rmcp lib test target does not build without the macros feature #1317

Description

@chrikrah

object! is #[macro_export]ed and documented from model.rs:42, but model.rs:60 puts it behind the macros feature, so it is unreachable in a --no-default-features build. The lib test target is where that shows on 8f9a28e: four unit tests call the macro.

$ cd /tmp/rmcp-main && cargo check -p rmcp --lib --no-default-features --profile test
# rustc 1.96.1 (31fca3adb 2026-06-26), the pinned rust-toolchain.toml, on 8f9a28e
error: cannot find macro `object` in this scope
    --> crates/rmcp/src/model.rs:5529:17
note: `object` is imported here, but it is a function, not a macro
    --> crates/rmcp/src/model.rs:4837:9
error: could not compile `rmcp` (lib test) due to 4 previous errors   # :5459 :5488 :5503 :5529

$ cargo check -p rmcp --lib --no-default-features --features macros --profile test
    Finished `test` profile [unoptimized + debuginfo] target(s) in 7.63s

# same export, `#[cfg(feature = "macros")]` deleted from model.rs:60, nothing else touched
$ cargo test -p rmcp --lib --no-default-features
    test result: ok. 139 passed; 0 failed; 0 ignored
# not run: the integration targets under crates/rmcp/tests, and any host other than Linux

The expansion is serde_json::json! around the ungated model::object function, serde_json is a plain dependency, and macros is dep:rmcp-macros + dep:pastey. Deleting the gate is the one-line option. Keeping it means object(json!({ ... })) at the four call sites, or a #[cfg(feature = "macros")] on the four #[test] functions.

Dropping --lib fails too, in 13 integration targets, on missing server/client items. Different cause, and none of the above fixes it.

@DaleSeo, the feature-matrix job on feat/rationalize-feature-flags (#1067) runs cargo check, which never builds a test target, and ci.yml:268 and :302 both enable macros. Would --profile test on that job, or a cargo test -p rmcp --lib --no-default-features line beside it, be the right home for this?

Activity

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

Metadata

Metadata

Assignees

Labels

P2Medium: important but non-blocking improvementT-modelModel/data structure changesT-testTesting related changesbugSomething is not workingready for workIssue is well-defined and ready to be picked up

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions