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