func parseConnectionString(cs string) (ConnectionConfig, error) {
	isAllUnicodeLetters := func(s string) bool {
		for _, r := range s {
			if !unicode.IsLetter(r) {
				return false
			}
		}
		return true
	}
	endpoint := cs
	var tld string
	var addr string
	if i := strings.Index(endpoint, ":"); i > 0 {
		if isAllUnicodeLetters(endpoint[:i]) && len(endpoint) > i+2 && endpoint[i+1:i+3] != "//" {
			tld = endpoint[:i]
			if len(tld) > maxTLDLength {
				return ConnectionConfig{}, fmt.Errorf("tld %s: %w", tld, ErrTLDTooLong)
			}
			endpoint = endpoint[i+1:]
		}
	}
	if i := strings.Index(endpoint, "@"); i > 0 {
		addr = common.HexToAddress(endpoint[:i]).String()
		endpoint = endpoint[i+1:]
	}
	return ConnectionConfig{
		Endpoint: endpoint,
		Address:  addr,
		TLD:      tld,
	}, nil
}
ParseConnectionString will try to parse a connection string used to connect
the Resolver to a name resolution service. The resulting config can be
used to initialize a resovler Service.
package multiresolver
import (
	"fmt"
	"strings"
	"unicode"
	"github.com/ethereum/go-ethereum/common"
)
const maxTLDLength = 63
type ConnectionConfig struct {
	TLD      string
	Address  string
	Endpoint string
}