systemprompt_ai/services/gateway/
spec.rs1use serde::{Deserialize, Serialize};
14
15#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default)]
16#[serde(deny_unknown_fields)]
17pub struct QuotaWindow {
18 pub window_seconds: i32,
19 pub max_requests: Option<i64>,
20 pub max_input_tokens: Option<i64>,
21 pub max_output_tokens: Option<i64>,
22}
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
30#[serde(rename_all = "lowercase")]
31pub enum SafetyHistoryMode {
32 #[default]
34 Off,
35 Audit,
38 Block,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize, Default)]
43#[serde(deny_unknown_fields)]
44pub struct SafetyConfig {
45 #[serde(default)]
46 pub scanners: Vec<String>,
47 #[serde(default)]
48 pub block_categories: Vec<String>,
49 #[serde(default)]
50 pub history: SafetyHistoryMode,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize, Default)]
54#[serde(deny_unknown_fields)]
55pub struct GatewayPolicySpec {
56 #[serde(default)]
57 pub quota_windows: Vec<QuotaWindow>,
58 #[serde(default)]
59 pub safety: SafetyConfig,
60}
61
62impl GatewayPolicySpec {
63 #[must_use]
64 pub fn permissive() -> Self {
65 Self::default()
66 }
67}