-
Notifications
You must be signed in to change notification settings - Fork 2
/
session_call_spec.go
57 lines (43 loc) · 1.57 KB
/
session_call_spec.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
package sdktypes
import (
"errors"
"go.autokitteh.dev/autokitteh/internal/kittehs"
sessionv1 "go.autokitteh.dev/autokitteh/proto/gen/go/autokitteh/sessions/v1"
)
type SessionCallSpec struct {
object[*SessionCallSpecPB, SessionCallSpecTraits]
}
var InvalidSessionCallSpec SessionCallSpec
type SessionCallSpecPB = sessionv1.Call_Spec
type SessionCallSpecTraits struct{}
func (SessionCallSpecTraits) Validate(m *SessionCallSpecPB) error {
return errors.Join(
objectField[Value]("function", m.Function),
valuesSliceField("args", m.Args),
valuesMapField("kwargs", m.Kwargs),
)
}
func (SessionCallSpecTraits) StrictValidate(m *SessionCallSpecPB) error {
return mandatory("function", m.Function)
}
func SessionCallSpecFromProto(m *SessionCallSpecPB) (SessionCallSpec, error) {
return FromProto[SessionCallSpec](m)
}
func StrictSessionCallSpecFromProto(m *SessionCallSpecPB) (SessionCallSpec, error) {
return Strict(SessionCallSpecFromProto(m))
}
func (p SessionCallSpec) Seq() uint32 { return p.read().Seq }
func (p SessionCallSpec) Data() (Value, []Value, map[string]Value) {
pb := p.read()
return forceFromProto[Value](pb.Function),
kittehs.Transform(pb.Args, forceFromProto[Value]),
kittehs.TransformMapValues(pb.Kwargs, forceFromProto[Value])
}
func NewSessionCallSpec(function Value, args []Value, kwargs map[string]Value, seq uint32) SessionCallSpec {
return forceFromProto[SessionCallSpec](&SessionCallSpecPB{
Seq: seq,
Function: function.ToProto(),
Args: kittehs.Transform(args, ToProto),
Kwargs: kittehs.TransformMapValues(kwargs, ToProto),
})
}