Skip to content

Commit 6392bf2

Browse files
committed
fix: support metadata and timeout properly in go slimrpc client
Signed-off-by: Sam Betts <[email protected]>
1 parent daa7b31 commit 6392bf2

File tree

2 files changed

+128
-9
lines changed

2 files changed

+128
-9
lines changed

data-plane/bindings/go/examples/slimrpc/simple/types/example_slimrpc.pb.go

Lines changed: 71 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

data-plane/slimrpc-compiler/src/golang/mod.rs

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package {{PACKAGE}}
1717
import (
1818
"context"
1919
"fmt"
20+
"time"
2021
2122
slim_bindings "github.com/agntcy/slim-bindings-go"
2223
"github.com/agntcy/slim-bindings-go/slimrpc"
@@ -58,8 +59,21 @@ func (c *{{SERVICE_NAME}}ClientImpl) {{METHOD_NAME}}(ctx context.Context, req *{
5859
return nil, err
5960
}
6061
62+
// Extract timeout from context
63+
var timeout *time.Duration
64+
if deadline, ok := ctx.Deadline(); ok {
65+
t := time.Until(deadline)
66+
timeout = &t
67+
}
68+
69+
// Extract metadata from context
70+
var metadata *map[string]string
71+
if md, ok := slimrpc.MetadataFromContext(ctx); ok {
72+
metadata = &md
73+
}
74+
6175
// Make RPC call
62-
respBytes, err := c.channel.CallUnaryAsync("{{PACKAGE_NAME}}.{{SERVICE_NAME}}", "{{METHOD_NAME}}", reqBytes, nil)
76+
respBytes, err := c.channel.CallUnaryAsync("{{PACKAGE_NAME}}.{{SERVICE_NAME}}", "{{METHOD_NAME}}", reqBytes, timeout, metadata)
6377
if err != nil {
6478
return nil, err
6579
}
@@ -85,8 +99,21 @@ func (c *{{SERVICE_NAME}}ClientImpl) {{METHOD_NAME}}(ctx context.Context, req *{
8599
return nil, err
86100
}
87101
102+
// Extract timeout from context
103+
var timeout *time.Duration
104+
if deadline, ok := ctx.Deadline(); ok {
105+
t := time.Until(deadline)
106+
timeout = &t
107+
}
108+
109+
// Extract metadata from context
110+
var metadata *map[string]string
111+
if md, ok := slimrpc.MetadataFromContext(ctx); ok {
112+
metadata = &md
113+
}
114+
88115
// Make RPC call
89-
stream, err := c.channel.CallUnaryStreamAsync("{{PACKAGE_NAME}}.{{SERVICE_NAME}}", "{{METHOD_NAME}}", reqBytes, nil)
116+
stream, err := c.channel.CallUnaryStreamAsync("{{PACKAGE_NAME}}.{{SERVICE_NAME}}", "{{METHOD_NAME}}", reqBytes, timeout, metadata)
90117
if err != nil {
91118
return nil, err
92119
}
@@ -100,7 +127,20 @@ const STREAM_UNARY_CLIENT_METHOD: &str = r#" {{METHOD_NAME}}(ctx context.Context
100127

101128
const STREAM_UNARY_CLIENT_IMPL: &str = r#"
102129
func (c *{{SERVICE_NAME}}ClientImpl) {{METHOD_NAME}}(ctx context.Context) (slimrpc.ClientRequestStream[*{{INPUT_TYPE}}, *{{OUTPUT_TYPE}}], error) {
103-
stream := c.channel.CallStreamUnary("{{PACKAGE_NAME}}.{{SERVICE_NAME}}", "{{METHOD_NAME}}", nil)
130+
// Extract timeout from context
131+
var timeout *time.Duration
132+
if deadline, ok := ctx.Deadline(); ok {
133+
t := time.Until(deadline)
134+
timeout = &t
135+
}
136+
137+
// Extract metadata from context
138+
var metadata *map[string]string
139+
if md, ok := slimrpc.MetadataFromContext(ctx); ok {
140+
metadata = &md
141+
}
142+
143+
stream := c.channel.CallStreamUnary("{{PACKAGE_NAME}}.{{SERVICE_NAME}}", "{{METHOD_NAME}}", timeout, metadata)
104144
return slimrpc.NewClientRequestStream[*{{INPUT_TYPE}}, *{{OUTPUT_TYPE}}](stream), nil
105145
}
106146
"#;
@@ -110,7 +150,20 @@ const STREAM_STREAM_CLIENT_METHOD: &str = r#" {{METHOD_NAME}}(ctx context.Contex
110150

111151
const STREAM_STREAM_CLIENT_IMPL: &str = r#"
112152
func (c *{{SERVICE_NAME}}ClientImpl) {{METHOD_NAME}}(ctx context.Context) (slimrpc.ClientBidiStream[*{{INPUT_TYPE}}, *{{OUTPUT_TYPE}}], error) {
113-
stream := c.channel.CallStreamStream("{{PACKAGE_NAME}}.{{SERVICE_NAME}}", "{{METHOD_NAME}}", nil)
153+
// Extract timeout from context
154+
var timeout *time.Duration
155+
if deadline, ok := ctx.Deadline(); ok {
156+
t := time.Until(deadline)
157+
timeout = &t
158+
}
159+
160+
// Extract metadata from context
161+
var metadata *map[string]string
162+
if md, ok := slimrpc.MetadataFromContext(ctx); ok {
163+
metadata = &md
164+
}
165+
166+
stream := c.channel.CallStreamStream("{{PACKAGE_NAME}}.{{SERVICE_NAME}}", "{{METHOD_NAME}}", timeout, metadata)
114167
return slimrpc.NewClientBidiStream[*{{INPUT_TYPE}}, *{{OUTPUT_TYPE}}](stream), nil
115168
}
116169
"#;

0 commit comments

Comments
 (0)