#![deny(missing_docs)]
#![warn(clippy::all)]
#![warn(missing_copy_implementations)]
#![warn(missing_debug_implementations)]
pub mod error;
pub mod models;
pub mod security;
pub use security::acs::{AcsProject, AcsV1Service};
pub use security::security_and_compliance::{
SecurityAndComplianceProject, SecurityAndComplianceV1Service, SecurityAndComplianceV2Service,
};
pub use crate::error::SecurityError;
#[derive(Debug)]
pub struct SecurityServices {
pub config: std::sync::Arc<crate::models::SecurityConfig>,
pub acs: AcsProject,
pub security_and_compliance: SecurityAndComplianceProject,
}
impl SecurityServices {
pub fn new(config: crate::models::SecurityConfig) -> Self {
let config = std::sync::Arc::new(config);
Self {
acs: AcsProject::new(config.clone()),
security_and_compliance: SecurityAndComplianceProject::new(config.clone()),
config,
}
}
pub fn config(&self) -> &crate::models::SecurityConfig {
&self.config
}
}
#[derive(Debug, Clone)]
pub struct SecurityClient {
inner: std::sync::Arc<SecurityServices>,
}
impl SecurityClient {
pub fn new(config: crate::models::SecurityConfig) -> Self {
Self {
inner: std::sync::Arc::new(SecurityServices::new(config)),
}
}
}
impl std::ops::Deref for SecurityClient {
type Target = SecurityServices;
fn deref(&self) -> &Self::Target {
&self.inner
}
}
impl Default for SecurityServices {
fn default() -> Self {
Self::new(crate::models::SecurityConfig::default())
}
}
pub type SecurityResult<T> = Result<T, crate::error::SecurityError>;
pub mod prelude {
pub use super::{
AcsProject, SecurityAndComplianceProject, SecurityClient, SecurityResult, SecurityServices,
};
pub use super::models::*;
pub use super::security::acs::{AcsProject as Acs, AcsV1Service};
pub use super::security::security_and_compliance::{
SecurityAndComplianceV1Service, SecurityAndComplianceV2Service,
};
}
#[cfg(test)]
mod tests {
#[test]
fn test_serialization_roundtrip() {
let json = r#"{"test": "value"}"#;
assert!(serde_json::from_str::<serde_json::Value>(json).is_ok());
}
#[test]
fn test_deserialization_from_json() {
let json = r#"{"field": "data"}"#;
let value: serde_json::Value = serde_json::from_str(json).expect("JSON 反序列化失败");
assert_eq!(value["field"], "data");
}
}