1use exchange_rateapi::{ExchangeRateAPI, Period};
10
11fn main() {
12 let api_key = std::env::var("EXCHANGE_RATE_API_KEY")
14 .expect("Set EXCHANGE_RATE_API_KEY environment variable");
15
16 let client = ExchangeRateAPI::new(&api_key);
17
18 println!("--- Latest Rates (USD) ---");
22 match client.latest("USD", Some("EUR,GBP,JPY,CAD")) {
23 Ok(resp) => {
24 for (currency, rate) in &resp.rates {
25 println!(" {} = {}", currency, rate);
26 }
27 }
28 Err(e) => eprintln!("Error: {}", e),
29 }
30
31 println!("\n--- Convert 100 USD to EUR ---");
35 match client.convert("USD", "EUR", 100.0) {
36 Ok(resp) => {
37 println!(" {} {} = {} {}", resp.amount, resp.from, resp.result, resp.to);
38 println!(" Rate: {}", resp.rate);
39 }
40 Err(e) => eprintln!("Error: {}", e),
41 }
42
43 println!("\n--- Single Rate: GBP/JPY ---");
47 match client.get_rate("GBP", "JPY") {
48 Ok(rate) => println!(" 1 GBP = {} JPY", rate),
49 Err(e) => eprintln!("Error: {}", e),
50 }
51
52 println!("\n--- Historical Rates (2025-01-15, EUR base) ---");
56 match client.for_date("2025-01-15", "EUR", Some("USD,GBP")) {
57 Ok(resp) => {
58 println!(" Date: {}", resp.date);
59 for (currency, rate) in &resp.rates {
60 println!(" {} = {}", currency, rate);
61 }
62 }
63 Err(e) => eprintln!("Error: {}", e),
64 }
65
66 println!("\n--- Time Series (USD/EUR, Jan 2025) ---");
70 match client.time_series("2025-01-01", "2025-01-07", "USD", Some("EUR")) {
71 Ok(resp) => {
72 let mut dates: Vec<&String> = resp.rates.keys().collect();
73 dates.sort();
74 for date in dates {
75 if let Some(rate) = resp.rates[date].get("EUR") {
76 println!(" {}: EUR = {}", date, rate);
77 }
78 }
79 }
80 Err(e) => eprintln!("Error: {}", e),
81 }
82
83 println!("\n--- Supported Currencies (first 10) ---");
87 match client.symbols() {
88 Ok(resp) => {
89 let mut symbols: Vec<(&String, &String)> = resp.symbols.iter().collect();
90 symbols.sort_by_key(|(code, _)| code.to_owned());
91 for (code, name) in symbols.iter().take(10) {
92 println!(" {}: {}", code, name);
93 }
94 println!(" ... and {} more", resp.symbols.len().saturating_sub(10));
95 }
96 Err(e) => eprintln!("Error: {}", e),
97 }
98
99 println!("\n--- Last 7 Days: USD/EUR ---");
103 match client.get_historical_rates("USD", "EUR", Period::SevenDays) {
104 Ok(resp) => {
105 let mut dates: Vec<&String> = resp.rates.keys().collect();
106 dates.sort();
107 for date in dates {
108 if let Some(rate) = resp.rates[date].get("EUR") {
109 println!(" {}: {}", date, rate);
110 }
111 }
112 }
113 Err(e) => eprintln!("Error: {}", e),
114 }
115}