func getValueForNumber()

in phonenumbers.go [3415:3452]


func getValueForNumber(onceMap map[string]*sync.Once, langMap map[string]*intStringMap, binMap map[string]string, language string, maxLength int, number *PhoneNumber) (string, int, error) {
	// do we have data for this language
	_, existing := binMap[language]
	if !existing {
		return "", 0, nil
	}

	// load it into our map
	onceMap[language].Do(func() {
		prefixMap, err := loadPrefixMap(binMap[language])
		if err == nil {
			langMap[language] = prefixMap
		}
	})

	// do we have a map for this language?
	prefixMap, ok := langMap[language]
	if !ok {
		return "", 0, fmt.Errorf("error loading language map for %s", language)
	}

	e164 := Format(number, E164)

	l := len(e164)
	if maxLength > l {
		maxLength = l
	}
	for i := maxLength; i > 1; i-- {
		index, err := strconv.Atoi(e164[0:i])
		if err != nil {
			return "", 0, err
		}
		if value, has := prefixMap.Map[index]; has {
			return value, index, nil
		}
	}
	return "", 0, nil
}