1use std::env;
2use std::error::Error;
3
4use nano_get::{Client, Request};
5
6fn env_or_default(name: &str, fallback: &str) -> String {
7 env::var(name).unwrap_or_else(|_| fallback.to_string())
8}
9
10fn print_setup() {
11 println!("The basic-auth example needs a real protected endpoint.");
12 println!("Set NANO_GET_BASIC_AUTH_URL to a URL that challenges with HTTP Basic auth.");
13 println!("Optional overrides:");
14 println!(" NANO_GET_BASIC_AUTH_USER");
15 println!(" NANO_GET_BASIC_AUTH_PASS");
16}
17
18fn main() -> Result<(), Box<dyn Error>> {
19 let Some(url) = env::var("NANO_GET_BASIC_AUTH_URL").ok() else {
20 print_setup();
21 return Ok(());
22 };
23
24 let user = env_or_default("NANO_GET_BASIC_AUTH_USER", "demo-user");
25 let pass = env_or_default("NANO_GET_BASIC_AUTH_PASS", "demo-pass");
26
27 let challenge_driven = Client::builder()
28 .basic_auth(user.clone(), pass.clone())
29 .build()
30 .execute(Request::get(&url)?)?;
31
32 let preemptive = Client::builder()
33 .preemptive_basic_auth(user.clone(), pass.clone())
34 .build()
35 .execute(Request::get(&url)?)?;
36
37 let mut request = Request::get(&url)?;
38 request.basic_auth(user, pass)?;
39 let manual = request.execute()?;
40
41 println!("basic-auth example");
42 println!("challenge-driven status: {}", challenge_driven.status_code);
43 println!("preemptive status: {}", preemptive.status_code);
44 println!("request-level override status: {}", manual.status_code);
45
46 Ok(())
47}