use std::sync::Arc;
use openlark_core::config::Config;
#[derive(Debug, Clone)]
pub struct CommunicationClient {
config: Arc<Config>,
#[cfg(feature = "im")]
pub im: ImClient,
#[cfg(feature = "contact")]
pub contact: ContactClient,
#[cfg(feature = "moments")]
pub moments: MomentsClient,
}
impl CommunicationClient {
pub fn new(config: Config) -> Self {
let config = Arc::new(config);
Self {
config: config.clone(),
#[cfg(feature = "im")]
im: ImClient::new(config.clone()),
#[cfg(feature = "contact")]
contact: ContactClient::new(config.clone()),
#[cfg(feature = "moments")]
moments: MomentsClient::new(config),
}
}
pub fn config(&self) -> &Config {
&self.config
}
}
#[cfg(feature = "im")]
#[derive(Debug, Clone)]
pub struct ImClient {
config: Arc<Config>,
}
#[cfg(feature = "im")]
impl ImClient {
fn new(config: Arc<Config>) -> Self {
Self { config }
}
pub fn config(&self) -> &Config {
&self.config
}
}
#[cfg(feature = "contact")]
#[derive(Debug, Clone)]
pub struct ContactClient {
config: Arc<Config>,
}
#[cfg(feature = "contact")]
impl ContactClient {
fn new(config: Arc<Config>) -> Self {
Self { config }
}
pub fn config(&self) -> &Config {
&self.config
}
}
#[cfg(feature = "moments")]
#[derive(Debug, Clone)]
pub struct MomentsClient {
config: Arc<Config>,
}
#[cfg(feature = "moments")]
impl MomentsClient {
fn new(config: Arc<Config>) -> Self {
Self { config }
}
pub fn config(&self) -> &Config {
&self.config
}
}
#[cfg(test)]
#[allow(unused_imports)]
mod tests {
use super::*;
fn create_test_config() -> Config {
Config::builder()
.app_id("test_app")
.app_secret("test_secret")
.build()
}
#[test]
fn test_communication_client_creation() {
let config = create_test_config();
let client = CommunicationClient::new(config);
assert_eq!(client.config().app_id(), "test_app");
}
#[test]
fn test_communication_client_debug() {
let config = create_test_config();
let client = CommunicationClient::new(config);
let debug_str = format!("{:?}", client);
assert!(debug_str.contains("CommunicationClient"));
}
#[test]
fn test_communication_client_clone() {
let config = create_test_config();
let client = CommunicationClient::new(config);
let cloned = client.clone();
assert_eq!(cloned.config().app_id(), "test_app");
}
#[cfg(feature = "im")]
#[test]
fn test_im_client_config() {
let config = create_test_config();
let client = CommunicationClient::new(config);
assert_eq!(client.im.config().app_id(), "test_app");
}
#[cfg(feature = "contact")]
#[test]
fn test_contact_client_config() {
let config = create_test_config();
let client = CommunicationClient::new(config);
assert_eq!(client.contact.config().app_id(), "test_app");
}
}