gleif_rs/model/
field_modification.rs1use chrono::{DateTime, Utc};
9use serde::{Deserialize, Serialize};
10
11#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
13pub struct FieldModification {
14 pub r#type: String,
16 pub id: String,
18 pub attributes: FieldModificationAttributes,
20}
21
22#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
24#[serde(rename_all = "camelCase")]
25pub struct FieldModificationAttributes {
26 pub lei: String,
28 pub record_type: String,
30 pub modification_type: String,
32 pub field: String,
34 pub date: DateTime<Utc>,
36 #[serde(skip_serializing_if = "Option::is_none")]
38 pub value_old: Option<String>,
39 pub value_new: String,
41 #[serde(skip_serializing_if = "Option::is_none")]
43 pub context: Option<FieldModificationContext>,
44}
45
46#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
48#[serde(rename_all = "camelCase")]
49pub struct FieldModificationContext {
50 #[serde(skip_serializing_if = "Option::is_none")]
52 pub relationship_type: Option<String>,
53 #[serde(skip_serializing_if = "Option::is_none")]
55 pub end_node: Option<String>,
56 #[serde(skip_serializing_if = "Option::is_none")]
58 pub exception_category: Option<String>,
59}
60
61#[cfg(test)]
62mod tests {
63 use super::*;
64 use crate::{model::common::GleifApiResponse, test_utils::test_model_files};
65 use serde_json;
66 use std::path::Path;
67
68 #[test]
69 fn test_deserialize_multi_field_modifications() {
70 let dir = Path::new("tests/data/field_modifications");
71 test_model_files(
72 |filename| {
73 filename.starts_with("field_modifications_")
74 && Path::new(filename)
75 .extension()
76 .is_some_and(|ext| ext.eq_ignore_ascii_case("json"))
77 },
78 |data| serde_json::from_str::<GleifApiResponse<Vec<FieldModification>>>(data),
79 |filename, list| {
80 if list.data.is_empty() {
81 return;
82 }
83 assert!(
84 !list.data[0].id.is_empty(),
85 "FieldModification id should not be empty in first record of {filename}"
86 );
87 assert!(
88 !list.data[0].attributes.lei.is_empty(),
89 "FieldModification LEI should not be empty in first record of {filename}"
90 );
91 },
92 dir,
93 );
94 }
95}