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