-
Notifications
You must be signed in to change notification settings - Fork 338
/
resolver.go
61 lines (47 loc) · 1.43 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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// Copyright 2020 The Swarm Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package mock
import (
"errors"
"fmt"
"github.com/ethersphere/bee/pkg/resolver"
)
// Assure mock Resolver implements the Resolver interface.
var _ resolver.Interface = (*Resolver)(nil)
// ErrNotImplemented denotes a function has not been implemented.
var ErrNotImplemented = errors.New("not implemented")
// Resolver is the mock Resolver implementation.
type Resolver struct {
IsClosed bool
resolveFunc func(string) (resolver.Address, error)
}
// Option function sets the option on the mock Resolver.
type Option func(*Resolver)
// NewResolver will create a new mock Resolver.
func NewResolver(opts ...Option) resolver.Interface {
r := &Resolver{}
// Apply all options.
for _, o := range opts {
o(r)
}
return r
}
// WithResolveFunc will override the Resolve function implementation.
func WithResolveFunc(f func(string) (resolver.Address, error)) Option {
return func(r *Resolver) {
r.resolveFunc = f
}
}
// Resolve implements the Resolver interface.
func (r *Resolver) Resolve(name string) (resolver.Address, error) {
if r.resolveFunc != nil {
return r.resolveFunc(name)
}
return resolver.Address{}, fmt.Errorf("resolveFunc: %w", ErrNotImplemented)
}
// Close implements the Resolver interface.
func (r *Resolver) Close() error {
r.IsClosed = true
return nil
}