Skip to main content

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
14use std::ops::Deref;
15
16pub use ssdeep::{SSDeepHash};
17pub use strings::{Wildcard, ServiceName, UpperString, Text, Domain, Email, Uri};
18pub use md5::MD5;
19pub use sha256::Sha256;
20pub use sha1::Sha1;
21pub use ja4::JA4;
22pub use ids::{Sid, Uuid};
23pub use classification::{ClassificationString, ExpandingClassification};
24
25use struct_metadata::Described;
26use serde::{Deserialize, Serialize};
27
28use crate::{ElasticMeta, Readable};
29
30/// Short name for serde json's basic map type
31pub type JsonMap = serde_json::Map<String, serde_json::Value>;
32
33impl Readable for JsonMap {
34    fn set_from_archive(&mut self, _from_archive: bool) {}
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.max(1) as u64))
48    }
49}
50
51impl Deref for NonZeroInteger {
52    type Target = u64;
53
54    fn deref(&self) -> &Self::Target {
55        &self.0
56    }
57}
58
59#[test]
60fn non_zero() {
61    assert_eq!(*serde_json::from_str::<NonZeroInteger>("0").unwrap(), 1);
62    assert_eq!(*serde_json::from_str::<NonZeroInteger>("-1").unwrap(), 1);
63    assert_eq!(*serde_json::from_str::<NonZeroInteger>("100").unwrap(), 100);
64}