func isLimitExceeded(data string) bool {
	limitExceedKeys := []string{
		"limit exceeded",
		"server too busy",
	}
	return containsIn(strings.ToLower(data), limitExceedKeys)
}
isLimitExceeded returns if domain whois query is limited
package whoisparser
import (
	"errors"
	"regexp"
	"strings"
)
var (
	ErrNotFoundDomain = errors.New("whoisparser: domain is not found")
	ErrReservedDomain = errors.New("whoisparser: domain is reserved to register")
	ErrPremiumDomain = errors.New("whoisparser: domain is available at premium price")
	ErrBlockedDomain = errors.New("whoisparser: domain is blocked due to brand protection")
	ErrDomainDataInvalid = errors.New("whoisparser: domain whois data is invalid")
	ErrDomainLimitExceed = errors.New("whoisparser: domain whois query limit exceeded")
)
func getDomainErrorType(data string) error {
	switch {
	case isNotFoundDomain(data):
		return ErrNotFoundDomain
	case isBlockedDomain(data):
		return ErrBlockedDomain
	case isPremiumDomain(data):
		return ErrPremiumDomain
	case isReservedDomain(data):
		return ErrReservedDomain
	case isLimitExceeded(data):
		return ErrDomainLimitExceed
	default:
		return ErrDomainDataInvalid
	}
}
func isNotFoundDomain(data string) bool {
	notFoundKeys := []string{
		"is free",
		"no found",
		"no match",
		"not found",
		"not match",
		"no data found",
		"nothing found",
		"no entries found",
		"no matching record",
		"not registered",
		"not been registered",
		"object does not exist",
		"query returned 0 objects",
	}
	return containsIn(strings.ToLower(data), notFoundKeys)
}
func isExtNotFoundDomain(data, extension string) bool {
	reBlank := regexp.MustCompile(`\s+`)
	data = reBlank.ReplaceAllString(data, " ")
	switch extension {
	case "ai", "cx", "gs":
		if strings.Contains(data, "Domain Status: No Object Found") {
			return true
		}
	case "de":
		if strings.Contains(data, "Status: free") {
			return true
		}
	case "eu", "it":
		if strings.Contains(data, "Status: AVAILABLE") {
			return true
		}
	case "nz":
		if strings.Contains(data, "query_status: 220 Available") {
			return true
		}
	case "sexy":
		if strings.Contains(data, "is available") {
			return true
		}
	}
	return false
}
func isReservedDomain(data string) bool {
	reservedKeys := []string{
		"reserved domain name",
		"reserved by the registry",
		"can not be registered online",
	}
	return containsIn(strings.ToLower(data), reservedKeys)
}
func isPremiumDomain(data string) bool {
	premiumKeys := []string{
		"premium domain is available for purchase",
		"platinum domain is available for purchase",
	}
	return containsIn(strings.ToLower(data), premiumKeys)
}
func isBlockedDomain(data string) bool {
	blockedKeys := []string{
		"dpml brand protection",
		"subscribes to the uni eps",
		"subscribes to the adultblock",
	}
	return containsIn(strings.ToLower(data), blockedKeys)
}