Skip to content

Commit c82d023

Browse files
authored
fix(connectRPC): add Connect-Protocol-Version header to gRPC requests (#3331)
1 parent eb61cdf commit c82d023

File tree

2 files changed

+41
-7
lines changed

2 files changed

+41
-7
lines changed

src/core/generator/proto/connect_rpc.rs

+34-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,28 @@
1+
use std::fmt::Display;
2+
13
use tailcall_valid::Valid;
24

35
use crate::core::config::{Config, Grpc, Http, Resolver, ResolverSet};
46
use crate::core::Transform;
57

8+
const HEADER_CONNECT_PROTOCOL_VERSION: &str = "Connect-Protocol-Version";
9+
10+
enum ConnectProtocolVersion {
11+
V1,
12+
}
13+
14+
impl Display for ConnectProtocolVersion {
15+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
16+
write!(
17+
f,
18+
"{}",
19+
match self {
20+
ConnectProtocolVersion::V1 => "1".to_string(),
21+
}
22+
)
23+
}
24+
}
25+
626
pub struct ConnectRPC;
727

828
impl Transform for ConnectRPC {
@@ -47,7 +67,12 @@ impl From<Grpc> for Http {
4767
let endpoint = parts[parts.len() - 1].to_string();
4868

4969
let new_url = format!("{}/{}/{}", url, method, endpoint);
50-
let headers = grpc.headers;
70+
let mut headers = grpc.headers;
71+
headers.push(crate::core::config::KeyValue {
72+
key: HEADER_CONNECT_PROTOCOL_VERSION.to_string(),
73+
value: ConnectProtocolVersion::V1.to_string(),
74+
});
75+
5176
let batch_key = grpc.batch_key;
5277
let dedupe = grpc.dedupe;
5378
let select = grpc.select;
@@ -136,6 +161,14 @@ mod tests {
136161
.value,
137162
"bar".to_string()
138163
);
164+
assert_eq!(
165+
http.headers
166+
.iter()
167+
.find(|h| h.key == "Connect-Protocol-Version")
168+
.unwrap()
169+
.value,
170+
"1".to_string()
171+
);
139172
assert_eq!(http.body, Some(json!({})));
140173
}
141174

tests/cli/snapshots/cli_spec__test__generator_spec__tests__cli__fixtures__generator__proto-connect-rpc.md.snap

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
source: tests/cli/gen.rs
3+
assertion_line: 333
34
expression: config.to_sdl()
45
snapshot_kind: text
56
---
@@ -61,12 +62,12 @@ type News {
6162
}
6263

6364
type Query {
64-
GEN__news__NewsService__AddNews(news: GEN__news__NewsInput!): News @http(url: "http://localhost:50051/news.NewsService/AddNews", body: "{{.args.news}}", method: "POST")
65-
GEN__news__NewsService__DeleteNews(newsId: Id!): Empty @http(url: "http://localhost:50051/news.NewsService/DeleteNews", body: "{{.args.newsId}}", method: "POST")
66-
GEN__news__NewsService__EditNews(news: GEN__news__NewsInput!): News @http(url: "http://localhost:50051/news.NewsService/EditNews", body: "{{.args.news}}", method: "POST")
67-
GEN__news__NewsService__GetAllNews: GEN__news__NewsList @http(url: "http://localhost:50051/news.NewsService/GetAllNews", body: {}, method: "POST")
68-
GEN__news__NewsService__GetMultipleNews(multipleNewsId: GEN__news__MultipleNewsId!): GEN__news__NewsList @http(url: "http://localhost:50051/news.NewsService/GetMultipleNews", body: "{{.args.multipleNewsId}}", method: "POST")
69-
GEN__news__NewsService__GetNews(newsId: Id!): News @http(url: "http://localhost:50051/news.NewsService/GetNews", body: "{{.args.newsId}}", method: "POST")
65+
GEN__news__NewsService__AddNews(news: GEN__news__NewsInput!): News @http(url: "http://localhost:50051/news.NewsService/AddNews", body: "{{.args.news}}", headers: [{key: "Connect-Protocol-Version", value: "1"}], method: "POST")
66+
GEN__news__NewsService__DeleteNews(newsId: Id!): Empty @http(url: "http://localhost:50051/news.NewsService/DeleteNews", body: "{{.args.newsId}}", headers: [{key: "Connect-Protocol-Version", value: "1"}], method: "POST")
67+
GEN__news__NewsService__EditNews(news: GEN__news__NewsInput!): News @http(url: "http://localhost:50051/news.NewsService/EditNews", body: "{{.args.news}}", headers: [{key: "Connect-Protocol-Version", value: "1"}], method: "POST")
68+
GEN__news__NewsService__GetAllNews: GEN__news__NewsList @http(url: "http://localhost:50051/news.NewsService/GetAllNews", body: {}, headers: [{key: "Connect-Protocol-Version", value: "1"}], method: "POST")
69+
GEN__news__NewsService__GetMultipleNews(multipleNewsId: GEN__news__MultipleNewsId!): GEN__news__NewsList @http(url: "http://localhost:50051/news.NewsService/GetMultipleNews", body: "{{.args.multipleNewsId}}", headers: [{key: "Connect-Protocol-Version", value: "1"}], method: "POST")
70+
GEN__news__NewsService__GetNews(newsId: Id!): News @http(url: "http://localhost:50051/news.NewsService/GetNews", body: "{{.args.newsId}}", headers: [{key: "Connect-Protocol-Version", value: "1"}], method: "POST")
7071
users: [User] @http(url: "http://jsonplaceholder.typicode.com/users")
7172
}
7273

0 commit comments

Comments
 (0)