assemblyline_models/types/
mod.rs

1pub mod ip;
2pub mod md5;
3pub mod sha1;
4pub mod sha256;
5pub mod ja4;
6pub mod ssdeep;
7pub mod classification;
8pub mod mapping_keys;
9pub mod strings;
10pub mod json_validation;
11pub mod ids;
12pub mod net_static;
13
14pub use ssdeep::{SSDeepHash};
15pub use strings::{Wildcard, ServiceName, UpperString, Text, Domain, Email, Uri};
16pub use md5::MD5;
17pub use sha256::Sha256;
18pub use sha1::Sha1;
19pub use ja4::JA4;
20pub use ids::{Sid, Uuid};
21pub use classification::{ClassificationString, ExpandingClassification};
22
23use struct_metadata::Described;
24use serde::{Deserialize, Serialize};
25
26use crate::{ElasticMeta, Readable};
27
28/// Short name for serde json's basic map type
29pub type JsonMap = serde_json::Map<String, serde_json::Value>;
30
31impl Readable for JsonMap {
32    fn set_from_archive(&mut self, from_archive: bool) {
33        self.insert("from_json".to_owned(), serde_json::json!(from_archive));
34    }
35}
36
37#[derive(Serialize, Described, Debug, Clone, Copy, PartialEq, Eq)]
38#[metadata_type(ElasticMeta)]
39pub struct NonZeroInteger(u64);
40
41impl<'de> Deserialize<'de> for NonZeroInteger {
42    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
43    where
44        D: serde::Deserializer<'de> 
45    {
46        let raw: i64 = i64::deserialize(deserializer)?;
47        Ok(NonZeroInteger(raw.min(1) as u64))
48    }
49}