-
Notifications
You must be signed in to change notification settings - Fork 109
/
input.go
88 lines (76 loc) · 2.9 KB
/
input.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
85
86
87
88
package inject
import (
"context"
"go.viam.com/rdk/components/input"
"go.viam.com/rdk/resource"
)
// InputController is an injected InputController.
type InputController struct {
input.Controller
name resource.Name
DoFunc func(ctx context.Context, cmd map[string]interface{}) (map[string]interface{}, error)
ControlsFunc func(ctx context.Context, extra map[string]interface{}) ([]input.Control, error)
EventsFunc func(ctx context.Context, extra map[string]interface{}) (map[input.Control]input.Event, error)
RegisterControlCallbackFunc func(
ctx context.Context,
control input.Control,
triggers []input.EventType,
ctrlFunc input.ControlFunction,
extra map[string]interface{},
) error
}
// NewInputController returns a new injected input controller.
func NewInputController(name string) *InputController {
return &InputController{name: input.Named(name)}
}
// Name returns the name of the resource.
func (s *InputController) Name() resource.Name {
return s.name
}
// Controls calls the injected function or the real version.
func (s *InputController) Controls(ctx context.Context, extra map[string]interface{}) ([]input.Control, error) {
if s.ControlsFunc == nil {
return s.Controller.Controls(ctx, extra)
}
return s.ControlsFunc(ctx, extra)
}
// Events calls the injected function or the real version.
func (s *InputController) Events(ctx context.Context, extra map[string]interface{}) (map[input.Control]input.Event, error) {
if s.EventsFunc == nil {
return s.Controller.Events(ctx, extra)
}
return s.EventsFunc(ctx, extra)
}
// RegisterControlCallback calls the injected function or the real version.
func (s *InputController) RegisterControlCallback(
ctx context.Context,
control input.Control,
triggers []input.EventType,
ctrlFunc input.ControlFunction,
extra map[string]interface{},
) error {
if s.RegisterControlCallbackFunc == nil {
return s.RegisterControlCallback(ctx, control, triggers, ctrlFunc, extra)
}
return s.RegisterControlCallbackFunc(ctx, control, triggers, ctrlFunc, extra)
}
// DoCommand calls the injected DoCommand or the real version.
func (s *InputController) DoCommand(ctx context.Context, cmd map[string]interface{}) (map[string]interface{}, error) {
if s.DoFunc == nil {
return s.Controller.DoCommand(ctx, cmd)
}
return s.DoFunc(ctx, cmd)
}
// TriggerableInputController is an injected injectable InputController.
type TriggerableInputController struct {
InputController
input.Triggerable
TriggerEventFunc func(ctx context.Context, event input.Event, extra map[string]interface{}) error
}
// TriggerEvent calls the injected function or the real version.
func (s *TriggerableInputController) TriggerEvent(ctx context.Context, event input.Event, extra map[string]interface{}) error {
if s.TriggerEventFunc == nil {
return s.TriggerEvent(ctx, event, extra)
}
return s.TriggerEventFunc(ctx, event, extra)
}