rspamd_client/protocol/
scan.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4/// Rspamd scan reply structure
5#[derive(Debug, Serialize, Deserialize)]
6pub struct RspamdScanReply {
7    /// If message has been skipped
8    #[serde(default)]
9    pub is_skipped: bool,
10    /// Scan score
11    #[serde(default)]
12    pub score: f64,
13    /// Required score (legacy)
14    #[serde(default)]
15    pub required_score: f64,
16    /// Action to take
17    #[serde(default)]
18    pub action: String,
19    /// Action thresholds
20    #[serde(default)]
21    pub thresholds: HashMap<String, f64>,
22    /// Symbols detected
23    #[serde(default)]
24    pub symbols: HashMap<String, Symbol>,
25    /// Messages
26    #[serde(default)]
27    pub messages: HashMap<String, String>,
28    /// URLs
29    #[serde(default)]
30    pub urls: Vec<String>,
31    /// Emails
32    #[serde(default)]
33    pub emails: Vec<String>,
34    /// Message id
35    #[serde(rename = "message-id", default)]
36    pub message_id: String,
37    /// Real time of scan
38    #[serde(default)]
39    pub time_real: f64,
40    /// Milter actions block
41    #[serde(default)]
42    pub milter: Option<Milter>,
43    #[serde(default)]
44    /// Filename
45    pub filename: String,
46    #[serde(default)]
47    pub scan_time: f64,
48    /// Rewritten message body (only present when body_block flag is set and message was rewritten)
49    /// This field is not part of the JSON response but is extracted from the response body
50    #[serde(skip)]
51    pub rewritten_body: Option<Vec<u8>>,
52}
53
54/// Symbol structure
55#[derive(Debug, Serialize, Deserialize)]
56pub struct Symbol {
57    #[serde(default)]
58    pub name: String,
59    #[serde(default)]
60    pub score: f64,
61    #[serde(default)]
62    pub metric_score: f64,
63    #[serde(default)]
64    pub description: Option<String>,
65    #[serde(default)]
66    pub options: Option<Vec<String>>,
67}
68
69/// Milter actions block
70#[derive(Debug, Serialize, Deserialize)]
71pub struct Milter {
72    #[serde(default)]
73    pub add_headers: HashMap<String, MailHeader>,
74    #[serde(default)]
75    pub remove_headers: HashMap<String, i32>,
76}
77
78/// Milter header action
79#[derive(Debug, Serialize, Deserialize)]
80pub struct MailHeader {
81    #[serde(default)]
82    pub value: String,
83    #[serde(default)]
84    pub order: i32,
85}