From 758b6c5fe367ee243229d0b55d9c6ece13e65b02 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Thu, 28 Jan 2021 13:02:08 +0100 Subject: [PATCH] server: emit default values in JSON Fixes #208 by always rendering the default values in a JSON response, even if they are "falsey" in the RPC message. --- server.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/server.go b/server.go index ae6b20045..5768e9022 100644 --- a/server.go +++ b/server.go @@ -195,11 +195,23 @@ func (s *Server) Start() error { s.cfg.RPCListen) } + // The default JSON marshaler of the REST proxy only sets + // OrigName to true, which instructs it to use the same field + // names as specified in the proto file and not switch to camel + // case. What we also want is that the marshaler prints all + // values, even if they are falsey. + customMarshalerOption := proxy.WithMarshalerOption( + proxy.MIMEWildcard, &proxy.JSONPb{ + OrigName: true, + EmitDefaults: true, + }, + ) + // We'll also create and start an accompanying proxy to serve // clients through REST. var ctx context.Context ctx, s.restCancel = context.WithCancel(context.Background()) - mux := proxy.NewServeMux() + mux := proxy.NewServeMux(customMarshalerOption) proxyOpts := []grpc.DialOption{ grpc.WithTransportCredentials(*restClientCreds), }