Skip to main content

depguard_settings/
model.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3use std::collections::BTreeMap;
4
5/// `depguard.toml` schema v1.
6///
7/// This is a *user-facing* config model: it is intentionally permissive so forward-compat is easy.
8#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
9pub struct DepguardConfigV1 {
10    /// Optional schema string for tooling (`depguard.config.v1`).
11    #[serde(default, skip_serializing_if = "Option::is_none")]
12    pub schema: Option<String>,
13
14    #[serde(default, skip_serializing_if = "Option::is_none")]
15    pub profile: Option<String>,
16
17    #[serde(default, skip_serializing_if = "Option::is_none")]
18    pub scope: Option<String>,
19
20    /// When to fail the check: `error` (default) or `warn`.
21    #[serde(default, skip_serializing_if = "Option::is_none")]
22    pub fail_on: Option<String>,
23
24    /// How many findings to emit before truncating the list.
25    #[serde(default, skip_serializing_if = "Option::is_none")]
26    pub max_findings: Option<u32>,
27
28    /// Optional baseline file path for suppressing known findings.
29    #[serde(default, skip_serializing_if = "Option::is_none")]
30    pub baseline: Option<String>,
31
32    /// Map of check_id -> config.
33    #[serde(default)]
34    pub checks: BTreeMap<String, CheckConfig>,
35}
36
37#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
38pub struct CheckConfig {
39    /// Override preset enable/disable.
40    #[serde(default, skip_serializing_if = "Option::is_none")]
41    pub enabled: Option<bool>,
42
43    /// Override preset severity: `info`, `warning`, `error`.
44    #[serde(default, skip_serializing_if = "Option::is_none")]
45    pub severity: Option<String>,
46
47    /// Generic allowlist patterns (semantics are check-specific).
48    #[serde(default)]
49    pub allow: Vec<String>,
50
51    /// deps.path_requires_version: ignore publish = false and still enforce.
52    #[serde(default, skip_serializing_if = "Option::is_none")]
53    pub ignore_publish_false: Option<bool>,
54}