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}
49
50/// Symbol structure
51#[derive(Debug, Serialize, Deserialize)]
52pub struct Symbol {
53	#[serde(default)]
54	pub name: String,
55	#[serde(default)]
56	pub score: f64,
57	#[serde(default)]
58	pub metric_score: f64,
59	#[serde(default)]
60	pub description: Option<String>,
61	#[serde(default)]
62	pub options: Option<Vec<String>>,
63}
64
65/// Milter actions block
66#[derive(Debug, Serialize, Deserialize)]
67pub struct Milter {
68	#[serde(default)]
69	pub add_headers: HashMap<String, MailHeader>,
70	#[serde(default)]
71	pub remove_headers: HashMap<String, i32>,
72}
73
74/// Milter header action
75#[derive(Debug, Serialize, Deserialize)]
76pub struct MailHeader {
77	#[serde(default)]
78	pub value: String,
79	#[serde(default)]
80	pub order: i32,
81}