Skip to main content

ready_set_rust/
lib.rs

1//! Rust capability provider plugin for `ready-set`.
2//!
3//! Contributes four capabilities (`workspace`, `toolchain`, `formatting`,
4//! `linting`) to the readiness matrix and answers the `__ready` / `__set` /
5//! `__go` lifecycle protocol per capability. The plugin requires a Cargo
6//! workspace; outside one, lifecycle calls return
7//! [`ExitCode::ProjectRequirementMissing`](ready_set_sdk::ExitCode::ProjectRequirementMissing).
8//!
9//! Contracts this provider conforms to:
10//! [`capabilities.md`](https://github.com/pulsearc-ai/ReadySet/blob/main/docs/contracts/capabilities.md)
11//! (descriptor and report shapes),
12//! [`change-log.md`](https://github.com/pulsearc-ai/ReadySet/blob/main/docs/contracts/change-log.md)
13//! (records every `__set` write for reversibility), and
14//! [`ready-set-toml.md`](https://github.com/pulsearc-ai/ReadySet/blob/main/docs/contracts/ready-set-toml.md)
15//! (the `.ready-set.toml` schema this provider seeds).
16
17#![forbid(unsafe_code)]
18#![warn(missing_docs)]
19
20pub mod gitignore;
21pub mod manifest_edit;
22pub mod members;
23pub mod options;
24pub mod readiness;
25pub mod ready_set_toml;
26pub mod runner;
27pub mod templates;
28pub mod workflow;
29pub mod workspace;
30
31use ready_set_sdk::describe::{Describe, Platform, Stability};
32use ready_set_sdk::{CapabilityDescriptor, CapabilityRelevance, CapabilityVerb, ProviderId};
33
34/// Provider id used by this plugin's capability descriptors.
35pub const PROVIDER_ID: &str = "rust";
36
37/// Return the plugin metadata payload.
38#[must_use]
39pub fn describe() -> Describe {
40    Describe {
41        description: "Rust product capabilities".into(),
42        version: env!("CARGO_PKG_VERSION")
43            .parse()
44            .unwrap_or_else(|_| semver::Version::new(0, 0, 0)),
45        stability: Stability::Stable,
46        min_dispatcher_version: "0.1.0"
47            .parse()
48            .unwrap_or_else(|_| semver::Version::new(0, 1, 0)),
49        platforms: vec![Platform::Linux, Platform::Macos, Platform::Windows],
50        project_requirements: vec!["cargo-workspace".into()],
51        capabilities: rust_capabilities(),
52        command_aliases: Vec::new(),
53    }
54}
55
56/// Capability descriptors contributed by this plugin.
57#[must_use]
58pub fn rust_capabilities() -> Vec<CapabilityDescriptor> {
59    vec![
60        descriptor(
61            "workspace",
62            "Workspace",
63            &[CapabilityVerb::Ready, CapabilityVerb::Set],
64        ),
65        descriptor(
66            "toolchain",
67            "Toolchain",
68            &[CapabilityVerb::Ready, CapabilityVerb::Set],
69        ),
70        descriptor(
71            "formatting",
72            "Formatting",
73            &[
74                CapabilityVerb::Ready,
75                CapabilityVerb::Set,
76                CapabilityVerb::Go,
77            ],
78        ),
79        descriptor(
80            "linting",
81            "Linting",
82            &[
83                CapabilityVerb::Ready,
84                CapabilityVerb::Set,
85                CapabilityVerb::Go,
86            ],
87        ),
88    ]
89}
90
91fn descriptor(id: &str, title: &str, verbs: &[CapabilityVerb]) -> CapabilityDescriptor {
92    CapabilityDescriptor {
93        id: id.into(),
94        title: title.into(),
95        provider: ProviderId::from(PROVIDER_ID),
96        verbs: verbs.to_vec(),
97        default_relevance: CapabilityRelevance::Required,
98    }
99}