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 project_requirements: vec!["cargo-workspace".into()],
51 capabilities: rust_capabilities(),
52 command_aliases: Vec::new(),
53 }
54}
55
56#[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}