From f163ac85d8739c8d8d77baa46e3701280299cefc Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Tue, 2 Feb 2021 09:57:05 +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 c514c9c..903ea39 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), }