gh_workflow/
permissions.rs

1//! Permission types for GitHub Workflow tokens.
2
3use derive_setters::Setters;
4use serde::{Deserialize, Serialize};
5
6/// Represents permissions for the `GITHUB_TOKEN`.
7#[derive(Debug, Setters, Serialize, Deserialize, Clone, Default, PartialEq, Eq)]
8#[serde(rename_all = "kebab-case")]
9#[setters(strip_option, into)]
10pub struct Permissions {
11    /// Permissions for actions.
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub actions: Option<Level>,
14
15    /// Permissions for repository contents.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub contents: Option<Level>,
18
19    /// Permissions for issues.
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub issues: Option<Level>,
22
23    /// Permissions for pull requests.
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub pull_requests: Option<Level>,
26
27    /// Permissions for deployments.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub deployments: Option<Level>,
30
31    /// Permissions for checks.
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub checks: Option<Level>,
34
35    /// Permissions for statuses.
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub statuses: Option<Level>,
38
39    /// Permissions for packages.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub packages: Option<Level>,
42
43    /// Permissions for pages.
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub pages: Option<Level>,
46
47    /// Permissions for ID tokens.
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub id_token: Option<Level>,
50}
51
52/// Represents the level of permissions.
53#[derive(Debug, Serialize, Deserialize, Clone, Copy, Default, PartialEq, Eq)]
54#[serde(rename_all = "kebab-case")]
55pub enum Level {
56    Read,
57    Write,
58    #[default]
59    None,
60}