use std::sync::Arc;
use std::time::Duration;
use serde_json::json;
use wecomx_runtime::{
BotGatewayTokenProvider, Credentials, MemoryCredentialStore, TokenProvider, WecomClientBuilder,
};
#[tokio::main]
async fn main() -> Result<(), wecomx::Error> {
let bot_id = std::env::var("WECOM_BOT_ID").expect("missing WECOM_BOT_ID");
let secret = std::env::var("WECOM_BOT_SECRET").expect("missing WECOM_BOT_SECRET");
let store = Arc::new(MemoryCredentialStore::new(Credentials::default()));
let provider = BotGatewayTokenProvider::new(bot_id, secret, store);
let client = WecomClientBuilder::new()
.token_provider(Arc::new(provider) as Arc<dyn TokenProvider>)
.timeout(Duration::from_secs(10))
.build()
.await?;
for svc in client.list_services().await? {
println!("service: {}", svc.name);
}
let method = client.method(&["hr", "users", "list"]).await?;
let result = method.invoke(json!({})).await?;
println!(
"{}",
serde_json::to_string_pretty(&result).unwrap_or_default()
);
Ok(())
}