Files
s390-tools/rust/utils/src/json.rs
Marc Hartmayer b5a750c2cc rust: utils: Introduce S390ToolsMetaData
Introduce S390ToolsMetaData struct, it can be used to generate the
s390-tools specific JSON metadata.

Reviewed-by: Steffen Eiden <seiden@linux.ibm.com>
Signed-off-by: Marc Hartmayer <marc@linux.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
2026-02-16 11:48:59 +01:00

78 lines
2.2 KiB
Rust

use std::time::{SystemTime, UNIX_EPOCH};
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::gethostname;
#[derive(Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct S390ToolsMetaData {
pub api_level: u32,
pub version: String,
pub host: String,
pub time_epoch: u64,
pub time: String,
}
impl S390ToolsMetaData {
/// Creates a new S390ToolsMetaData with current system information
///
/// # Arguments
///
/// * `api_level` - The API level version to use
pub fn new(api_level: u32) -> Self {
let host = gethostname().unwrap_or("unknown".to_owned());
let version = crate::release_string!().to_string();
let now = SystemTime::now()
.duration_since(UNIX_EPOCH)
.expect("System time before UNIX epoch");
let time_epoch = now.as_secs();
let dt = DateTime::<Utc>::from(UNIX_EPOCH + now);
let time = dt.format("%F %T%z").to_string();
Self {
api_level,
version,
host,
time_epoch,
time,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_metadata_creation() {
let metadata = S390ToolsMetaData::new(1);
assert_eq!(metadata.api_level, 1);
assert!(!metadata.version.is_empty());
assert!(!metadata.host.is_empty());
assert!(metadata.time_epoch > 0);
assert!(!metadata.time.is_empty());
}
#[test]
fn test_metadata_serialization_deserialization() {
let metadata = S390ToolsMetaData {
api_level: 1,
version: "DEBUG_BUILD".to_string(),
host: "testhost".to_string(),
time_epoch: 1770912807,
time: "2026-02-12 16:13:27+0000".to_string(),
};
let json = serde_json::to_string(&metadata).unwrap();
assert_eq!(
json,
r#"{"api_level":1,"version":"DEBUG_BUILD","host":"testhost","time_epoch":1770912807,"time":"2026-02-12 16:13:27+0000"}"#
);
let deserialized: S390ToolsMetaData = serde_json::from_str(&json).unwrap();
assert_eq!(metadata, deserialized);
}
}