patreon 0.2.1

Patreon client
Documentation
use patreon::{PatreonUserClient, user_client::identity_fields};

fn env(name: &str) -> String {
    std::env::var(name).unwrap_or_else(|_| panic!("{name} is required"))
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut client = PatreonUserClient::new(env("USER_ACCESS_TOKEN"));

    if let Ok(base_url) = std::env::var("PATREON_BASE_URL") {
        client = client.with_base_url(base_url);
    }

    let http_client = reqwest::Client::builder()
        .user_agent("patreon-rust-example")
        .build()?;
    client = client.with_http_client(http_client);

    let identity = client.identity().await?;
    println!("identity.user_id: {}", identity.data.id);

    let identity_custom = client
        .identity_with_fields(&[
            identity_fields::EMAIL,
            identity_fields::FULL_NAME,
            identity_fields::IMAGE_URL,
        ])
        .await?;
    println!("identity_with_fields.user_id: {}", identity_custom.data.id);

    let identity_with_memberships = client.identity_with_memberships().await?;
    println!(
        "identity_with_memberships.user_id: {}",
        identity_with_memberships.data.id
    );

    let identity_with_memberships_and_campaign =
        client.identity_with_memberships_and_campaign().await?;
    println!(
        "identity_with_memberships_and_campaign.user_id: {}",
        identity_with_memberships_and_campaign.data.id
    );

    let identity_full = client.identity_full().await?;
    println!("identity_full.user_id: {}", identity_full.data.id);

    Ok(())
}