Skip to content

Commit 4a9a0da

Browse files
committed
feat(go): fully implement outgoing TCP transport
1 parent bbe418b commit 4a9a0da

26 files changed

Lines changed: 692 additions & 218 deletions

File tree

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1999,7 +1999,8 @@ impl InterfaceGenerator<'_> {
19991999
return {fmt}.Errorf("pending byte list future length of %d overflows a 32-bit integer", n)
20002000
}}
20012001
{slog}.Debug("writing pending byte list future length", "len", n)
2002-
if err := {wrpc}.WriteUint32(uint32(n), w); err != nil {{
2002+
_, err = {wrpc}.WriteUint32(uint32(n), w)
2003+
if err != nil {{
20032004
return {fmt}.Errorf("failed to write pending byte list future length of %d: %w", n, err)
20042005
}}
20052006
{slog}.Debug("writing pending byte list future contents", "buf", chunk[:n])
@@ -2105,7 +2106,8 @@ impl InterfaceGenerator<'_> {
21052106
}}
21062107
if n > 0 {{
21072108
{slog}.Debug("writing pending byte stream chunk length", "len", n)
2108-
if err := {wrpc}.WriteUint32(uint32(n), w); err != nil {{
2109+
_, err = {wrpc}.WriteUint32(uint32(n), w)
2110+
if err != nil {{
21092111
return {fmt}.Errorf("failed to write pending byte stream chunk length of %d: %w", n, err)
21102112
}}
21112113
_, err = w.Write(chunk[:n])
@@ -2174,7 +2176,8 @@ impl InterfaceGenerator<'_> {
21742176
return {errors}.New("total outgoing pending stream element count would overflow a 32-bit unsigned integer")
21752177
}}
21762178
{slog}.Debug("writing pending stream chunk length", "len", n)
2177-
if err = {wrpc}.WriteUint32(uint32(n), w); err != nil {{
2179+
_, err = {wrpc}.WriteUint32(uint32(n), w)
2180+
if err != nil {{
21782181
return {fmt}.Errorf("failed to write pending stream chunk length of %d: %w", n, err)
21792182
}}
21802183
for _, v := range chunk {{

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ func (v *Req) WriteToIndex(w wrpc.ByteWriter) (func(wrpc.IndexWriter) error, err
6565
return errors.New("total outgoing pending stream element count would overflow a 32-bit unsigned integer")
6666
}
6767
slog.Debug("writing pending stream chunk length", "len", n)
68-
if err = wrpc.WriteUint32(uint32(n), w); err != nil {
68+
_, err = wrpc.WriteUint32(uint32(n), w)
69+
if err != nil {
6970
return fmt.Errorf("failed to write pending stream chunk length of %d: %w", n, err)
7071
}
7172
for _, v := range chunk {
@@ -151,7 +152,8 @@ func (v *Req) WriteToIndex(w wrpc.ByteWriter) (func(wrpc.IndexWriter) error, err
151152
}
152153
if n > 0 {
153154
slog.Debug("writing pending byte stream chunk length", "len", n)
154-
if err := wrpc.WriteUint32(uint32(n), w); err != nil {
155+
_, err = wrpc.WriteUint32(uint32(n), w)
156+
if err != nil {
155157
return fmt.Errorf("failed to write pending byte stream chunk length of %d: %w", n, err)
156158
}
157159
_, err = w.Write(chunk[:n])
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package main
2+
3+
import (
4+
"log"
5+
6+
app "wrpc.io/examples/go/streams-client"
7+
wrpctcp "wrpc.io/go/x/tcp"
8+
)
9+
10+
func run() (err error) {
11+
addr := "[::1]:7761"
12+
return app.Run(addr, wrpctcp.NewClient(addr))
13+
}
14+
15+
func main() {
16+
if err := run(); err != nil {
17+
log.Fatal(err)
18+
}
19+
}

examples/go/streams-client/go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@ go 1.23.0
55
toolchain go1.24.1
66

77
require (
8-
github.com/nats-io/nats.go v1.40.1
8+
github.com/nats-io/nats.go v1.42.0
99
wrpc.io/go v0.1.0
1010
)
1111

1212
require (
1313
github.com/klauspost/compress v1.18.0 // indirect
14-
github.com/nats-io/nkeys v0.4.10 // indirect
14+
github.com/nats-io/nkeys v0.4.11 // indirect
1515
github.com/nats-io/nuid v1.0.1 // indirect
16-
golang.org/x/crypto v0.36.0 // indirect
17-
golang.org/x/sys v0.31.0 // indirect
16+
golang.org/x/crypto v0.37.0 // indirect
17+
golang.org/x/sys v0.32.0 // indirect
1818
)
1919

2020
replace wrpc.io/go v0.1.0 => ../../../go

examples/go/streams-client/go.sum

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
22
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
3-
github.com/nats-io/nats.go v1.40.1 h1:MLjDkdsbGUeCMKFyCFoLnNn/HDTqcgVa3EQm+pMNDPk=
4-
github.com/nats-io/nats.go v1.40.1/go.mod h1:wV73x0FSI/orHPSYoyMeJB+KajMDoWyXmFaRrrYaaTo=
5-
github.com/nats-io/nkeys v0.4.10 h1:glmRrpCmYLHByYcePvnTBEAwawwapjCPMjy2huw20wc=
6-
github.com/nats-io/nkeys v0.4.10/go.mod h1:OjRrnIKnWBFl+s4YK5ChQfvHP2fxqZexrKJoVVyWB3U=
3+
github.com/nats-io/nats.go v1.42.0 h1:ynIMupIOvf/ZWH/b2qda6WGKGNSjwOUutTpWRvAmhaM=
4+
github.com/nats-io/nats.go v1.42.0/go.mod h1:iRWIPokVIFbVijxuMQq4y9ttaBTMe0SFdlZfMDd+33g=
5+
github.com/nats-io/nkeys v0.4.11 h1:q44qGV008kYd9W1b1nEBkNzvnWxtRSQ7A8BoqRrcfa0=
6+
github.com/nats-io/nkeys v0.4.11/go.mod h1:szDimtgmfOi9n25JpfIdGw12tZFYXqhGxjhVxsatHVE=
77
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=
9-
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
10-
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
11-
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
12-
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
9+
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
10+
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
11+
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
12+
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ func (v *Req) WriteToIndex(w wrpc.ByteWriter) (func(wrpc.IndexWriter) error, err
6565
return errors.New("total outgoing pending stream element count would overflow a 32-bit unsigned integer")
6666
}
6767
slog.Debug("writing pending stream chunk length", "len", n)
68-
if err = wrpc.WriteUint32(uint32(n), w); err != nil {
68+
_, err = wrpc.WriteUint32(uint32(n), w)
69+
if err != nil {
6970
return fmt.Errorf("failed to write pending stream chunk length of %d: %w", n, err)
7071
}
7172
for _, v := range chunk {
@@ -151,7 +152,8 @@ func (v *Req) WriteToIndex(w wrpc.ByteWriter) (func(wrpc.IndexWriter) error, err
151152
}
152153
if n > 0 {
153154
slog.Debug("writing pending byte stream chunk length", "len", n)
154-
if err := wrpc.WriteUint32(uint32(n), w); err != nil {
155+
_, err = wrpc.WriteUint32(uint32(n), w)
156+
if err != nil {
155157
return fmt.Errorf("failed to write pending byte stream chunk length of %d: %w", n, err)
156158
}
157159
_, err = w.Write(chunk[:n])
@@ -517,7 +519,8 @@ func ServeInterface(s wrpc.Server, h Handler) (stop func() error, err error) {
517519
return errors.New("total outgoing pending stream element count would overflow a 32-bit unsigned integer")
518520
}
519521
slog.Debug("writing pending stream chunk length", "len", n)
520-
if err = wrpc.WriteUint32(uint32(n), w); err != nil {
522+
_, err = wrpc.WriteUint32(uint32(n), w)
523+
if err != nil {
521524
return fmt.Errorf("failed to write pending stream chunk length of %d: %w", n, err)
522525
}
523526
for _, v := range chunk {
@@ -603,7 +606,8 @@ func ServeInterface(s wrpc.Server, h Handler) (stop func() error, err error) {
603606
}
604607
if n > 0 {
605608
slog.Debug("writing pending byte stream chunk length", "len", n)
606-
if err := wrpc.WriteUint32(uint32(n), w); err != nil {
609+
_, err = wrpc.WriteUint32(uint32(n), w)
610+
if err != nil {
607611
return fmt.Errorf("failed to write pending byte stream chunk length of %d: %w", n, err)
608612
}
609613
_, err = w.Write(chunk[:n])

examples/go/streams-server/go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@ go 1.23.0
55
toolchain go1.24.1
66

77
require (
8-
github.com/nats-io/nats.go v1.40.1
8+
github.com/nats-io/nats.go v1.42.0
99
wrpc.io/go v0.1.0
1010
)
1111

1212
require (
1313
github.com/klauspost/compress v1.18.0 // indirect
14-
github.com/nats-io/nkeys v0.4.10 // indirect
14+
github.com/nats-io/nkeys v0.4.11 // indirect
1515
github.com/nats-io/nuid v1.0.1 // indirect
16-
golang.org/x/crypto v0.36.0 // indirect
17-
golang.org/x/sys v0.31.0 // indirect
16+
golang.org/x/crypto v0.37.0 // indirect
17+
golang.org/x/sys v0.32.0 // indirect
1818
)
1919

2020
replace wrpc.io/go v0.1.0 => ../../../go

examples/go/streams-server/go.sum

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
22
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
3-
github.com/nats-io/nats.go v1.40.1 h1:MLjDkdsbGUeCMKFyCFoLnNn/HDTqcgVa3EQm+pMNDPk=
4-
github.com/nats-io/nats.go v1.40.1/go.mod h1:wV73x0FSI/orHPSYoyMeJB+KajMDoWyXmFaRrrYaaTo=
5-
github.com/nats-io/nkeys v0.4.10 h1:glmRrpCmYLHByYcePvnTBEAwawwapjCPMjy2huw20wc=
6-
github.com/nats-io/nkeys v0.4.10/go.mod h1:OjRrnIKnWBFl+s4YK5ChQfvHP2fxqZexrKJoVVyWB3U=
3+
github.com/nats-io/nats.go v1.42.0 h1:ynIMupIOvf/ZWH/b2qda6WGKGNSjwOUutTpWRvAmhaM=
4+
github.com/nats-io/nats.go v1.42.0/go.mod h1:iRWIPokVIFbVijxuMQq4y9ttaBTMe0SFdlZfMDd+33g=
5+
github.com/nats-io/nkeys v0.4.11 h1:q44qGV008kYd9W1b1nEBkNzvnWxtRSQ7A8BoqRrcfa0=
6+
github.com/nats-io/nkeys v0.4.11/go.mod h1:szDimtgmfOi9n25JpfIdGw12tZFYXqhGxjhVxsatHVE=
77
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=
9-
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
10-
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
11-
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
12-
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
9+
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
10+
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
11+
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
12+
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package main
2+
3+
import (
4+
"log"
5+
6+
app "wrpc.io/examples/go/wasi-keyvalue-client"
7+
wrpctcp "wrpc.io/go/x/tcp"
8+
)
9+
10+
func run() (err error) {
11+
addr := "[::1]:7761"
12+
return app.Run(addr, wrpctcp.NewClient(addr))
13+
}
14+
15+
func main() {
16+
if err := run(); err != nil {
17+
log.Fatal(err)
18+
}
19+
}

examples/go/wasi-keyvalue-client/go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ toolchain go1.24.1
77
replace wrpc.io/go v0.1.0 => ../../../go
88

99
require (
10-
github.com/nats-io/nats.go v1.40.1
10+
github.com/nats-io/nats.go v1.42.0
1111
wrpc.io/go v0.1.0
1212
)
1313

1414
require (
1515
github.com/klauspost/compress v1.18.0 // indirect
16-
github.com/nats-io/nkeys v0.4.10 // indirect
16+
github.com/nats-io/nkeys v0.4.11 // indirect
1717
github.com/nats-io/nuid v1.0.1 // indirect
18-
golang.org/x/crypto v0.36.0 // indirect
19-
golang.org/x/sys v0.31.0 // indirect
18+
golang.org/x/crypto v0.37.0 // indirect
19+
golang.org/x/sys v0.32.0 // indirect
2020
)

0 commit comments

Comments
 (0)