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::NotCargoWorkspace`](ready_set_sdk::ExitCode::NotCargoWorkspace).
8//!
9//! Contracts this provider conforms to:
10//! [`capabilities.md`](https://github.com/pulsearc-ai/ready-set/blob/main/docs/contracts/capabilities.md)
11//! (descriptor and report shapes),
12//! [`change-log.md`](https://github.com/pulsearc-ai/ready-set/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/ready-set/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        requires_cargo_workspace: true,
51        capabilities: rust_capabilities(),
52    }
53}
54
55/// Capability descriptors contributed by this plugin.
56#[must_use]
57pub fn rust_capabilities() -> Vec<CapabilityDescriptor> {
58    vec![
59        descriptor(
60            "workspace",
61            "Workspace",
62            &[CapabilityVerb::Ready, CapabilityVerb::Set],
63        ),
64        descriptor(
65            "toolchain",
66            "Toolchain",
67            &[CapabilityVerb::Ready, CapabilityVerb::Set],
68        ),
69        descriptor(
70            "formatting",
71            "Formatting",
72            &[
73                CapabilityVerb::Ready,
74                CapabilityVerb::Set,
75                CapabilityVerb::Go,
76            ],
77        ),
78        descriptor(
79            "linting",
80            "Linting",
81            &[
82                CapabilityVerb::Ready,
83                CapabilityVerb::Set,
84                CapabilityVerb::Go,
85            ],
86        ),
87    ]
88}
89
90fn descriptor(id: &str, title: &str, verbs: &[CapabilityVerb]) -> CapabilityDescriptor {
91    CapabilityDescriptor {
92        id: id.into(),
93        title: title.into(),
94        provider: ProviderId::from(PROVIDER_ID),
95        verbs: verbs.to_vec(),
96        default_relevance: CapabilityRelevance::Required,
97    }
98}