use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct RawPolicy {
#[serde(skip_serializing_if = "Option::is_none")]
pub schema_version: Option<String>,
pub project: RawProject,
#[serde(skip_serializing_if = "Option::is_none")]
pub commands: Option<RawCommands>,
#[serde(skip_serializing_if = "Option::is_none")]
pub paths: Option<RawPaths>,
#[serde(skip_serializing_if = "Option::is_none")]
pub roles: Option<IndexMap<String, RawRole>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub constraints: Option<RawConstraints>,
#[serde(skip_serializing_if = "Option::is_none")]
pub outputs: Option<Vec<String>>,
}
#[derive(Debug, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct RawProject {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
}
#[derive(Debug, Default, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct RawCommands {
#[serde(skip_serializing_if = "Option::is_none")]
pub install: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dev: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lint: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub test: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub build: Option<String>,
}
#[derive(Debug, Default, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct RawPaths {
#[serde(skip_serializing_if = "Option::is_none")]
pub editable: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub protected: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub generated: Option<Vec<String>>,
}
#[derive(Debug, Default, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct RawRole {
#[serde(skip_serializing_if = "Option::is_none")]
pub editable: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub forbidden: Option<Vec<String>>,
}
#[derive(Debug, Default, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct RawConstraints {
#[serde(skip_serializing_if = "Option::is_none")]
pub require_tests_for_code_changes: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub forbid_secrets: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub require_human_review_for_protected_paths: Option<bool>,
}