use std::time::Duration;
use myid::Config;
use myid::MyIdResult;
use myid::error::MyIdError;
fn main() -> MyIdResult<()> {
minimal_config()?;
full_config()?;
from_env_config();
error_handling_examples();
Ok(())
}
fn minimal_config() -> MyIdResult<()> {
println!("=== Minimal Config ===");
let cfg = Config::new("https://myid.example.uz", "app_id", "secret_123")?;
println!("Base URL: {}", cfg.base_url());
println!("Client ID: {}", cfg.client_id());
println!("Timeout: {:?}", cfg.timeout());
println!("User-Agent: {}", cfg.user_agent());
println!("Debug: {cfg:#?}\n");
Ok(())
}
fn full_config() -> MyIdResult<()> {
println!("=== Full Config ===");
let cfg = Config::new("https://myid.example.uz", "app_id", "secret_123")?
.with_timeout(Duration::from_secs(30))?
.with_connect_timeout(Duration::from_secs(5))?
.with_user_agent("my-service/2.0")
.with_proxy("http://proxy.corp.local:8080")?;
println!("{cfg:#?}\n");
Ok(())
}
fn from_env_config() {
println!("=== From Environment ===");
match Config::from_env(None) {
Ok(cfg) => {
println!(
"Yuklandi: base_url={}, client_id={}",
cfg.base_url(),
cfg.client_id()
);
}
Err(MyIdError::Config { message }) => {
println!("Config xatosi (kutilgan): {message}");
println!("MYID_BASE_URL, MYID_CLIENT_ID, MYID_CLIENT_SECRET o'rnating\n");
}
Err(e) => println!("Xato: {e}\n"),
}
}
fn error_handling_examples() {
println!("=== Xato holatlari ===");
let cases: &[(&str, &str, &str)] = &[
("not-a-url", "id", "secret"), ("ftp://x.uz", "id", "secret"), ("https://x.uz", "", "secret"), ("https://x.uz", "id", ""), ("", "id", "secret"), ];
for (url, id, secret) in cases {
match Config::new(*url, *id, *secret) {
Ok(_) => println!("ok (kutilmagan)"),
Err(e) => println!(" {e}"),
}
}
if let Err(e) = Config::new("https://x.uz", "id", "secret")
.expect("to'g'ri config")
.with_proxy("not-a-proxy")
{
println!(" {e}");
}
println!();
}