-
Notifications
You must be signed in to change notification settings - Fork 2
/
actor.go
78 lines (63 loc) · 1.6 KB
/
actor.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
/*
Copyright 2023 The RedisOperator Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package actor
import (
"context"
"github.com/alauda/redis-operator/pkg/types"
)
type Command interface {
String() string
}
// ActorResult
type ActorResult struct {
next Command
result interface{}
}
func NewResult(cmd Command) *ActorResult {
return &ActorResult{next: cmd}
}
func NewResultWithValue(cmd Command, val interface{}) *ActorResult {
return &ActorResult{next: cmd, result: val}
}
func NewResultWithError(cmd Command, err error) *ActorResult {
return &ActorResult{next: cmd, result: err}
}
// Next
func (c *ActorResult) NextCommand() Command {
if c == nil {
return nil
}
return c.next
}
// Result
func (c *ActorResult) Result() interface{} {
if c == nil {
return nil
}
return c.result
}
// Err
func (c *ActorResult) Err() error {
if c == nil || c.result == nil {
return nil
}
if e, ok := c.result.(error); ok {
return e
}
return nil
}
// Actor actor is used process instance with specified state
type Actor interface {
SupportedCommands() []Command
Do(ctx context.Context, cluster types.RedisInstance) *ActorResult
}