1#![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
34pub const PROVIDER_ID: &str = "rust";
36
37#[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#[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}