Skip to content

Commit af59cd1

Browse files
Allow optional description for manifest variables (#3219)
Signed-off-by: Brian Hardock <[email protected]>
1 parent 04a3e8e commit af59cd1

File tree

7 files changed

+298
-42
lines changed

7 files changed

+298
-42
lines changed

crates/expressions/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,13 +330,15 @@ mod tests {
330330
(
331331
"required".into(),
332332
Variable {
333+
description: None,
333334
default: None,
334335
secret: false,
335336
},
336337
),
337338
(
338339
"default".into(),
339340
Variable {
341+
description: None,
340342
default: Some("default-value".into()),
341343
secret: false,
342344
},

crates/loader/src/local.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,7 @@ fn locked_variable(variable: v2::Variable) -> Result<locked::Variable> {
764764
"must be `required` OR have a `default`"
765765
);
766766
Ok(locked::Variable {
767+
description: variable.description,
767768
default: variable.default.clone(),
768769
secret: variable.secret,
769770
})

crates/locked-app/src/locked.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,9 @@ pub struct LockedTrigger {
342342
/// A Variable specifies a custom configuration variable.
343343
#[derive(Clone, Debug, Serialize, Deserialize)]
344344
pub struct Variable {
345+
/// A brief description of the variable.
346+
#[serde(default, skip_serializing_if = "Option::is_none")]
347+
pub description: Option<String>,
345348
/// The variable's default value. If unset, the variable is required.
346349
#[serde(default, skip_serializing_if = "Option::is_none")]
347350
pub default: Option<String>,

crates/manifest/src/schema/common.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ use super::json_schema;
1111
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)]
1212
#[serde(deny_unknown_fields)]
1313
pub struct Variable {
14+
/// A brief description of the variable.
15+
///
16+
/// Example: `description = "This is a variable"`
17+
///
18+
/// Learn more: https://spinframework.dev/variables#adding-variables-to-your-applications
19+
#[serde(default, skip_serializing_if = "Option::is_none")]
20+
pub description: Option<String>,
1421
/// Whether a value must be supplied at runtime. If not specified, required defaults
1522
/// to `false`, and `default` must be provided.
1623
///

crates/manifest/tests/ui/maximal.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
},
2222
"variables": {
2323
"var_one": {
24+
"description": "Test me like one of your French strings!",
2425
"default": "Default"
2526
},
2627
"var_two": {

crates/manifest/tests/ui/maximal.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ global_option = true
1313
lint_level = "savage"
1414

1515
[variables]
16-
var_one = { default = "Default" }
16+
var_one = { description = "Test me like one of your French strings!", default = "Default" }
1717
var_two = { required = true, secret = true }
1818

1919
[[trigger.fake]]

0 commit comments

Comments
 (0)