-
Notifications
You must be signed in to change notification settings - Fork 110
/
slam_service.go
84 lines (73 loc) · 2.73 KB
/
slam_service.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package inject
import (
"context"
"go.viam.com/rdk/resource"
"go.viam.com/rdk/services/slam"
"go.viam.com/rdk/spatialmath"
)
// SLAMService represents a fake instance of a slam service.
type SLAMService struct {
slam.Service
name resource.Name
PositionFunc func(ctx context.Context) (spatialmath.Pose, string, error)
PointCloudMapFunc func(ctx context.Context, returnEditedMap bool) (func() ([]byte, error), error)
InternalStateFunc func(ctx context.Context) (func() ([]byte, error), error)
PropertiesFunc func(ctx context.Context) (slam.Properties, error)
DoCommandFunc func(ctx context.Context, cmd map[string]interface{}) (map[string]interface{}, error)
CloseFunc func(ctx context.Context) error
}
// NewSLAMService returns a new injected SLAM service.
func NewSLAMService(name string) *SLAMService {
return &SLAMService{name: slam.Named(name)}
}
// Name returns the name of the resource.
func (slamSvc *SLAMService) Name() resource.Name {
return slamSvc.name
}
// Position calls the injected PositionFunc or the real version.
func (slamSvc *SLAMService) Position(ctx context.Context) (spatialmath.Pose, string, error) {
if slamSvc.PositionFunc == nil {
return slamSvc.Service.Position(ctx)
}
return slamSvc.PositionFunc(ctx)
}
// PointCloudMap calls the injected PointCloudMap or the real version.
func (slamSvc *SLAMService) PointCloudMap(ctx context.Context, returnEditedMap bool) (func() ([]byte, error), error) {
if slamSvc.PointCloudMapFunc == nil {
return slamSvc.Service.PointCloudMap(ctx, returnEditedMap)
}
return slamSvc.PointCloudMapFunc(ctx, returnEditedMap)
}
// InternalState calls the injected InternalState or the real version.
func (slamSvc *SLAMService) InternalState(ctx context.Context) (func() ([]byte, error), error) {
if slamSvc.InternalStateFunc == nil {
return slamSvc.Service.InternalState(ctx)
}
return slamSvc.InternalStateFunc(ctx)
}
// Properties calls the injected PropertiesFunc or the real version.
func (slamSvc *SLAMService) Properties(ctx context.Context) (slam.Properties, error) {
if slamSvc.PropertiesFunc == nil {
return slamSvc.Service.Properties(ctx)
}
return slamSvc.PropertiesFunc(ctx)
}
// DoCommand calls the injected DoCommand or the real variant.
func (slamSvc *SLAMService) DoCommand(ctx context.Context,
cmd map[string]interface{},
) (map[string]interface{}, error) {
if slamSvc.DoCommandFunc == nil {
return slamSvc.Service.DoCommand(ctx, cmd)
}
return slamSvc.DoCommandFunc(ctx, cmd)
}
// Close calls the injected Close or the real version.
func (slamSvc *SLAMService) Close(ctx context.Context) error {
if slamSvc.CloseFunc == nil {
if slamSvc.Service == nil {
return nil
}
return slamSvc.Service.Close(ctx)
}
return slamSvc.CloseFunc(ctx)
}