-
Notifications
You must be signed in to change notification settings - Fork 4
/
resolver.go
47 lines (41 loc) · 1.07 KB
/
resolver.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package vpcinfo
import (
"context"
"strings"
)
// Resolver is the interface implemented by *net.Resolver, or other resolvers
// used to lookup VPC information.
type Resolver interface {
LookupTXT(ctx context.Context, name string) ([]string, error)
}
const (
// DefaultDomain is the default domain used when initializing the default
// resolver.
DefaultDomain = "vpcinfo.local"
)
// ResolverWithDomain wraps the resolver passed as argument to append the given
// domain to all name lookups.
func ResolverWithDomain(domain string, resolver Resolver) Resolver {
if domain == "" {
return resolver
}
if !strings.HasPrefix(domain, ".") { // normalize
domain = "." + domain
}
return &resolverWithDomain{
resolver: resolver,
domain: domain,
}
}
type resolverWithDomain struct {
resolver Resolver
domain string
}
func (r *resolverWithDomain) LookupTXT(ctx context.Context, name string) ([]string, error) {
if name == "" {
name = strings.TrimPrefix(r.domain, ".")
} else {
name = strings.TrimSuffix(name, ".") + r.domain
}
return r.resolver.LookupTXT(ctx, name)
}