Skip to main content

systemconfiguration/
system_configuration.rs

1use serde::Deserialize;
2
3use crate::{bridge, error::Result, ffi, SystemConfigurationError};
4
5#[derive(Clone, Debug, Deserialize, Eq, PartialEq)]
6pub struct SystemConfigurationLastError {
7    pub domain: String,
8    pub code: i64,
9    pub description: String,
10    pub failure_reason: Option<String>,
11    pub recovery_suggestion: Option<String>,
12}
13
14#[derive(Clone, Copy, Debug, Default)]
15pub struct SystemConfiguration;
16
17impl SystemConfiguration {
18    pub fn copy_last_error() -> Result<Option<SystemConfigurationLastError>> {
19        let raw = unsafe { ffi::system_configuration::sc_copy_last_error_json() };
20        if raw.is_null() {
21            return Ok(None);
22        }
23        bridge::parse_json("sc_copy_last_error_json", raw).map(Some)
24    }
25
26    pub fn error_domain() -> Result<String> {
27        bridge::take_optional_string(unsafe {
28            ffi::system_configuration::sc_system_configuration_error_domain()
29        })
30        .ok_or_else(|| {
31            SystemConfigurationError::null(
32                "sc_system_configuration_error_domain",
33                "bridge returned null SystemConfiguration error domain",
34            )
35        })
36    }
37}