fn matches_region_and_locale()

in components/search/src/environment_matching.rs [50:92]


fn matches_region_and_locale(
    user_region: &str,
    user_locale: &str,
    environment: &JSONVariantEnvironment,
) -> bool {
    if does_array_include(&environment.excluded_regions, user_region)
        || does_array_include(&environment.excluded_locales, user_locale)
    {
        return false;
    }

    // This is a special case, if all_regions_and_locales is false (default value)
    // and region and locales are not set, then we assume that for the purposes of
    // matching region & locale, we do match everywhere. This allows us to specify
    // none of these options but match against other items such as distribution or
    // application name.
    if !environment.all_regions_and_locales
        && environment.regions.is_empty()
        && environment.locales.is_empty()
    {
        return true;
    }

    if does_array_include(&environment.regions, user_region)
        && does_array_include(&environment.locales, user_locale)
    {
        return true;
    }

    if environment.regions.is_empty() && does_array_include(&environment.locales, user_locale) {
        return true;
    }

    if environment.locales.is_empty() && does_array_include(&environment.regions, user_region) {
        return true;
    }

    if environment.all_regions_and_locales {
        return true;
    }

    false
}