use serde::{Deserialize, Serialize};
use crate::model::{Action, Context, Resource, Subject};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct EvaluationRequest {
pub subject: Subject,
pub action: Action,
pub resource: Resource,
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<Context>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct EvaluationResponse {
pub decision: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<serde_json::Value>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct EvaluationsRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub subject: Option<Subject>,
#[serde(skip_serializing_if = "Option::is_none")]
pub action: Option<Action>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resource: Option<Resource>,
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<Context>,
pub evaluations: Vec<EvaluationItem>,
#[serde(skip_serializing_if = "Option::is_none")]
pub options: Option<EvaluationsOptions>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct EvaluationItem {
#[serde(skip_serializing_if = "Option::is_none")]
pub subject: Option<Subject>,
#[serde(skip_serializing_if = "Option::is_none")]
pub action: Option<Action>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resource: Option<Resource>,
#[serde(skip_serializing_if = "Option::is_none")]
pub context: Option<Context>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct EvaluationsOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub evaluations_semantic: Option<EvaluationSemantic>,
#[serde(flatten)]
pub extra: Option<serde_json::Map<String, serde_json::Value>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum EvaluationSemantic {
#[serde(rename = "execute_all")]
ExecuteAll,
#[serde(rename = "deny_on_first_deny")]
DenyOnFirstDeny,
#[serde(rename = "permit_on_first_permit")]
PermitOnFirstPermit,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct EvaluationsResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub decision: Option<bool>,
pub evaluations: Vec<EvaluationResponse>,
}