cloud_terrastodon_azure_devops 0.35.0

Helpers for interacting with Azure DevOps for the Cloud Terrastodon project
use crate::fetch_azure_devops_user_license_entitlements;
use cloud_terrastodon_azure_devops_types::AzureDevOpsOrganizationUrl;
use std::collections::HashSet;

pub enum UserOnboardingStatus {
    NotOnboarded,
    Onboarded,
}

pub async fn get_azure_devops_user_onboarding_statuses<T: AsRef<str>>(
    org_url: &AzureDevOpsOrganizationUrl,
    user_emails: impl IntoIterator<Item = T>,
) -> eyre::Result<Vec<(T, UserOnboardingStatus)>> {
    let existing_users = fetch_azure_devops_user_license_entitlements(org_url)
        .await?
        .into_iter()
        .map(|user| user.user.unique_name)
        .collect::<HashSet<_>>();

    let mut rtn = Vec::new();
    for user in user_emails {
        let status = match existing_users.contains(user.as_ref()) {
            true => UserOnboardingStatus::Onboarded,
            false => UserOnboardingStatus::NotOnboarded,
        };
        rtn.push((user, status));
    }
    Ok(rtn)
}