gh_workflow/
concurrency.rs

1use derive_setters::Setters;
2use serde::{Deserialize, Serialize};
3
4use crate::expression::Expression;
5
6/// Represents concurrency settings for workflows.
7#[derive(Debug, Setters, Serialize, Deserialize, Clone, Default, PartialEq, Eq)]
8#[serde(rename_all = "kebab-case")]
9#[setters(strip_option, into)]
10pub struct Concurrency {
11    /// The group name for concurrency.
12    pub group: String,
13
14    /// Whether to cancel in-progress jobs.
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub cancel_in_progress: Option<bool>,
17
18    /// The limit on concurrent jobs.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub limit: Option<u32>,
21}
22
23impl Concurrency {
24    pub fn new(group: impl Into<Expression>) -> Self {
25        let expr: Expression = group.into();
26        Self { group: expr.0, ..Default::default() }
27    }
28}