cedar_policy_validator/diagnostics/
validation_warnings.rs1macro_rules! impl_diagnostic_warning {
23 () => {
24 fn severity(&self) -> Option<miette::Severity> {
25 Some(miette::Severity::Warning)
26 }
27 };
28}
29
30use cedar_policy_core::{ast::PolicyID, impl_diagnostic_from_source_loc_opt_field, parser::Loc};
31use miette::Diagnostic;
32use thiserror::Error;
33
34#[derive(Debug, Clone, PartialEq, Error, Eq, Hash)]
36#[error("for policy `{policy_id}`, string `\"{string}\"` contains mixed scripts")]
37pub struct MixedScriptString {
38 pub source_loc: Option<Loc>,
40 pub policy_id: PolicyID,
42 pub string: String,
44}
45
46impl Diagnostic for MixedScriptString {
47 impl_diagnostic_from_source_loc_opt_field!(source_loc);
48 impl_diagnostic_warning!();
49}
50
51#[derive(Debug, Clone, PartialEq, Error, Eq, Hash)]
53#[error("for policy `{policy_id}`, string `\"{string}\"` contains BIDI control characters")]
54pub struct BidiCharsInString {
55 pub source_loc: Option<Loc>,
57 pub policy_id: PolicyID,
59 pub string: String,
61}
62
63impl Diagnostic for BidiCharsInString {
64 impl_diagnostic_from_source_loc_opt_field!(source_loc);
65 impl_diagnostic_warning!();
66}
67
68#[derive(Debug, Clone, PartialEq, Error, Eq, Hash)]
70#[error("for policy `{policy_id}`, identifier `{id}` contains BIDI control characters")]
71pub struct BidiCharsInIdentifier {
72 pub source_loc: Option<Loc>,
74 pub policy_id: PolicyID,
76 pub id: String,
78}
79
80impl Diagnostic for BidiCharsInIdentifier {
81 impl_diagnostic_from_source_loc_opt_field!(source_loc);
82 impl_diagnostic_warning!();
83}
84
85#[derive(Debug, Clone, PartialEq, Error, Eq, Hash)]
87#[error("for policy `{policy_id}`, identifier `{id}` contains mixed scripts")]
88pub struct MixedScriptIdentifier {
89 pub source_loc: Option<Loc>,
91 pub policy_id: PolicyID,
93 pub id: String,
95}
96impl Diagnostic for MixedScriptIdentifier {
97 impl_diagnostic_from_source_loc_opt_field!(source_loc);
98 impl_diagnostic_warning!();
99}
100
101#[derive(Debug, Clone, PartialEq, Error, Eq, Hash)]
103#[error(
104 "for policy `{policy_id}`, identifier `{}` contains the character `{}` which is not a printable ASCII character and falls outside of the General Security Profile for Identifiers",
105 .id.escape_debug(),
106 .confusable_character.escape_debug()
107)]
108pub struct ConfusableIdentifier {
109 pub source_loc: Option<Loc>,
111 pub policy_id: PolicyID,
113 pub id: String,
115 pub confusable_character: char,
117}
118
119impl Diagnostic for ConfusableIdentifier {
120 impl_diagnostic_from_source_loc_opt_field!(source_loc);
121 impl_diagnostic_warning!();
122}
123
124#[derive(Debug, Clone, PartialEq, Error, Eq, Hash)]
126#[error("for policy `{policy_id}`, policy is impossible: the policy expression evaluates to false for all valid requests")]
127pub struct ImpossiblePolicy {
128 pub source_loc: Option<Loc>,
130 pub policy_id: PolicyID,
132}
133
134impl Diagnostic for ImpossiblePolicy {
135 impl_diagnostic_from_source_loc_opt_field!(source_loc);
136 impl_diagnostic_warning!();
137}