earthmc 2.0.5

Async client for interacting with the EarthMC API
Documentation
use std::{env, str::FromStr as _, sync::Arc};

use earthmc::{client::ClientBuilder, retry_strategy::NeverRetry};
use parking_lot::Mutex;
use uuid::Uuid;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    dotenvy::dotenv()?;

    let api_key = env::var("API_KEY")?;
    let player_uuid = Uuid::from_str(&env::var("PLAYER_UUID")?)?;

    eprintln!(
        "querying shops for {player_uuid}; API_KEY length={}",
        api_key.len()
    );

    let mut client_builder = ClientBuilder::default();
    client_builder.retry_strategy(Arc::new(Mutex::new(NeverRetry)));

    if let Ok(user_agent) = env::var("USER_AGENT") {
        eprintln!("using USER_AGENT={user_agent:?}");
        client_builder.reqwest_client(
            reqwest::ClientBuilder::new()
                .user_agent(user_agent)
                .build()?,
        );
    }

    let client = client_builder.api_key(api_key).build();

    let query = [player_uuid].to_vec();

    let results = match client.shops(query, None).await {
        Ok(results) => results,
        Err(error) => {
            eprintln!("shop query failed: {error:?}");
            return Err(error.into());
        }
    };

    for result in results {
        println!("{:?}", result);
    }

    Ok(())
}