Skip to content

Commit 64db4d2

Browse files
committed
feat(go): implement stream<T> bindgen
Signed-off-by: Roman Volosatovs <[email protected]>
1 parent 3a10748 commit 64db4d2

File tree

17 files changed

+1515
-876
lines changed

17 files changed

+1515
-876
lines changed

crates/wit-bindgen-go/src/interface.rs

Lines changed: 1188 additions & 728 deletions
Large diffs are not rendered by default.

crates/wit-bindgen-rust/tests/codegen_no_std.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//! Like `codegen_tests` in codegen.rs, but with no_std.
1+
//! Like `codegen_tests` in codegen.rs, but with `no_std`.
22
//!
33
//! We use `std_feature` and don't enable the "std" feature.
44

examples/go/hello-client/bindings/wrpc_examples/hello/handler/bindings.wrpc.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ func Hello(ctx__ context.Context, wrpc__ wrpc.Client) (r0__ string, close__ func
1818
if err__ != nil {
1919
return fmt.Errorf("failed to write empty parameters: %w", err__)
2020
}
21-
r0__, err__ = func(r wrpc.ByteReader) (string, error) {
21+
r0__, err__ = func(r interface {
22+
io.ByteReader
23+
io.Reader
24+
}) (string, error) {
2225
var x uint32
2326
var s uint
2427
for i := 0; i < 5; i++ {

examples/go/hello-client/cmd/hello-client-nats/main.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,14 @@ func run() (err error) {
3030

3131
for _, prefix := range os.Args[1:] {
3232
wrpc := wrpcnats.NewClient(nc, prefix)
33-
greeting, err := handler.Hello(context.Background(), wrpc)
33+
greeting, cleanup, err := handler.Hello(context.Background(), wrpc)
3434
if err != nil {
3535
return fmt.Errorf("failed to call `wrpc-examples:hello/handler.hello`: %w", err)
3636
}
3737
fmt.Printf("%s: %s\n", prefix, greeting)
38+
if err := cleanup(); err != nil {
39+
return fmt.Errorf("failed to shutdown `wrpc-examples:hello/handler.hello` invocation: %w", err)
40+
}
3841
}
3942
return nil
4043
}

examples/go/hello-server/bindings/exports/wrpc_examples/hello/handler/bindings.wrpc.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
fmt "fmt"
99
wrpc "github.com/wrpc/wrpc/go"
1010
errgroup "golang.org/x/sync/errgroup"
11+
io "io"
1112
slog "log/slog"
1213
math "math"
1314
)
@@ -35,26 +36,26 @@ func ServeInterface(c wrpc.Client, h Handler) (stop func() error, err error) {
3536

3637
var buf bytes.Buffer
3738
writes := make(map[uint32]func(wrpc.IndexWriter) error, 1)
38-
write0, err := func(v string, w wrpc.ByteWriter) (func(wrpc.IndexWriter) error, error) {
39+
write0, err := (func(wrpc.IndexWriter) error)(nil), func(v string, w io.Writer) (err error) {
3940
n := len(v)
4041
if n > math.MaxUint32 {
41-
return nil, fmt.Errorf("string byte length of %d overflows a 32-bit integer", n)
42+
return fmt.Errorf("string byte length of %d overflows a 32-bit integer", n)
4243
}
43-
if err := func(v int, w wrpc.ByteWriter) error {
44+
if err = func(v int, w io.Writer) error {
4445
b := make([]byte, binary.MaxVarintLen32)
4546
i := binary.PutUvarint(b, uint64(v))
4647
slog.Debug("writing string byte length", "len", n)
47-
_, err := w.Write(b[:i])
48+
_, err = w.Write(b[:i])
4849
return err
4950
}(n, w); err != nil {
50-
return nil, fmt.Errorf("failed to write string length of %d: %w", n, err)
51+
return fmt.Errorf("failed to write string byte length of %d: %w", n, err)
5152
}
5253
slog.Debug("writing string bytes")
53-
_, err := w.Write([]byte(v))
54+
_, err = w.Write([]byte(v))
5455
if err != nil {
55-
return nil, fmt.Errorf("failed to write string bytes: %w", err)
56+
return fmt.Errorf("failed to write string bytes: %w", err)
5657
}
57-
return nil, nil
58+
return nil
5859
}(r0, &buf)
5960
if err != nil {
6061
return fmt.Errorf("failed to write result value 0: %w", err)

examples/go/hello-server/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go 1.22.2
55
require (
66
github.com/nats-io/nats.go v1.34.1
77
github.com/wrpc/wrpc/go v0.0.0-unpublished
8+
golang.org/x/sync v0.7.0
89
)
910

1011
require (

examples/go/hello-server/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,7 @@ github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
88
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
99
golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
1010
golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
11+
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
12+
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
1113
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
1214
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=

0 commit comments

Comments
 (0)