package integration
import (
"context"
"fmt"
"log/slog"
wrpc "wrpc.io/go"
"wrpc.io/tests/go/bindings/sync_server/exports/wrpc_test/integration/sync"
)
type SyncHandler struct{}
func (SyncHandler) F(ctx context.Context, x string) (uint32, error) {
slog.DebugContext(ctx, "handling `f`", "x", x)
if x != "f" {
panic(fmt.Errorf("expected: `f`\ngot:`%s`", x))
}
return 42, nil
}
func (SyncHandler) Foo(ctx context.Context, x string) error {
slog.DebugContext(ctx, "handling `foo`", "x", x)
if x != "foo" {
panic(fmt.Errorf("expected: `foo`\ngot:`%s`", x))
}
return nil
}
func (SyncHandler) Fallible(ctx context.Context, ok bool) (*wrpc.Result[bool, string], error) {
slog.DebugContext(ctx, "handling `fallible`", "ok", ok)
if ok {
return wrpc.Ok[string](true), nil
} else {
return wrpc.Err[bool]("test"), nil
}
}
func (SyncHandler) Numbers(ctx context.Context) (uint8, uint16, uint32, uint64, int8, int16, int32, int64, float32, float64, error) {
return 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, nil
}
func (SyncHandler) WithFlags(ctx context.Context, a, b, c bool) (*sync.Abc, error) {
slog.DebugContext(ctx, "handling `with-flags`", "a", a, "b", b, "c", c)
return &sync.Abc{A: a, B: b, C: c}, nil
}
func (SyncHandler) WithVariantList(ctx context.Context) ([]*sync.Var, error) {
slog.DebugContext(ctx, "handling `with-variant-list`")
return []*sync.Var{
sync.NewVarEmpty(),
sync.NewVarVar(&sync.Rec{
Nested: &sync.RecNested{
Foo: "foo",
},
}),
sync.NewVarEmpty(),
sync.NewVarEmpty(),
sync.NewVarEmpty(),
sync.NewVarVar(&sync.Rec{
Nested: &sync.RecNested{
Foo: "bar",
},
}),
}, nil
}
func (SyncHandler) WithVariantOption(ctx context.Context, ok bool) (*sync.Var, error) {
slog.DebugContext(ctx, "handling `with-variant-option`", "ok", ok)
if ok {
return sync.NewVarVar(&sync.Rec{
Nested: &sync.RecNested{
Foo: "bar",
},
}), nil
}
return nil, nil
}
func (SyncHandler) WithRecord(ctx context.Context) (*sync.Rec, error) {
slog.DebugContext(ctx, "handling `with-record`")
return &sync.Rec{
Nested: &sync.RecNested{
Foo: "foo",
},
}, nil
}
func (SyncHandler) WithRecordList(ctx context.Context, n uint8) ([]*sync.Rec, error) {
slog.DebugContext(ctx, "handling `with-record-list`", "n", n)
if n == 0 {
return nil, nil
}
vs := make([]*sync.Rec, n)
for i := range vs {
vs[i] = &sync.Rec{
Nested: &sync.RecNested{
Foo: fmt.Sprintf("%d", i),
},
}
}
return vs, nil
}
func (SyncHandler) WithRecordTuple(ctx context.Context) (*sync.Rec, *sync.Rec, error) {
slog.DebugContext(ctx, "handling `with-record-tuple`")
return &sync.Rec{
Nested: &sync.RecNested{
Foo: "0",
},
},
&sync.Rec{
Nested: &sync.RecNested{
Foo: "1",
},
},
nil
}
func (SyncHandler) WithEnum(ctx context.Context) (sync.Foobar, error) {
return sync.Foobar_Bar, nil
}