@@ -3405,48 +3405,41 @@ func GetTimezonesForNumber(number *PhoneNumber) ([]string, error) {
3405
3405
return GetTimezonesForPrefix (e164 )
3406
3406
}
3407
3407
3408
- func fillLangMap (langMap map [string ]* intStringMap , dataFS embed.FS , dir , language string ) (bool , error ) {
3408
+ func lazyLoadPrefixes (langMap map [string ]* intStringMap , dataFS embed.FS , dir , language string ) (* intStringMap , error ) {
3409
3409
dataLoadMutex .Lock ()
3410
3410
defer dataLoadMutex .Unlock ()
3411
3411
3412
- _ , ok := langMap [language ]
3412
+ // if we already have prefixes (or nil if they don't exist) return that
3413
+ prefixes , ok := langMap [language ]
3413
3414
if ok {
3414
- return true , nil
3415
+ return prefixes , nil
3415
3416
}
3416
3417
3417
- // do we have data for this language
3418
+ // try to load the data file for this language
3418
3419
data , err := dataFS .ReadFile (dir + "/" + language + ".txt.gz" )
3419
- if err != nil {
3420
- if errors .Is (err , fs .ErrNotExist ) {
3421
- return false , nil
3422
- }
3423
-
3424
- return false , err
3420
+ if err != nil && ! errors .Is (err , fs .ErrNotExist ) {
3421
+ return nil , err
3425
3422
}
3426
3423
3427
- // load it into our map
3428
- prefixMap , err := loadPrefixMap (data )
3429
- if err == nil {
3430
- langMap [language ] = prefixMap
3431
-
3432
- return true , nil
3424
+ if data != nil {
3425
+ prefixes , err = loadPrefixMap (data )
3426
+ if err != nil {
3427
+ return nil , err
3428
+ }
3429
+ langMap [language ] = prefixes
3430
+ } else {
3431
+ langMap [language ] = nil // language doesn't have data
3433
3432
}
3434
3433
3435
- return false , err
3434
+ return langMap [ language ], nil
3436
3435
}
3437
3436
3438
3437
func getValueForNumber (langMap map [string ]* intStringMap , dataFS embed.FS , dir , language string , maxLength int , number * PhoneNumber ) (string , int , error ) {
3439
- ok , err := fillLangMap (langMap , dataFS , dir , language )
3440
- if ! ok || err ! = nil {
3438
+ prefixes , err := lazyLoadPrefixes (langMap , dataFS , dir , language )
3439
+ if err != nil || prefixes = = nil {
3441
3440
return "" , 0 , err
3442
3441
}
3443
3442
3444
- // do we have a map for this language?
3445
- prefixMap , ok := langMap [language ]
3446
- if ! ok {
3447
- return "" , 0 , fmt .Errorf ("error loading language map for %s" , language )
3448
- }
3449
-
3450
3443
e164 := Format (number , E164 )
3451
3444
3452
3445
l := len (e164 )
@@ -3458,7 +3451,7 @@ func getValueForNumber(langMap map[string]*intStringMap, dataFS embed.FS, dir, l
3458
3451
if err != nil {
3459
3452
return "" , 0 , err
3460
3453
}
3461
- if value , has := prefixMap .Map [index ]; has {
3454
+ if value , has := prefixes .Map [index ]; has {
3462
3455
return value , index , nil
3463
3456
}
3464
3457
}
0 commit comments