From 6c6d07bf4f1b34f0e47699e63ba9b69986e025b3 Mon Sep 17 00:00:00 2001 From: jamesread Date: Mon, 27 Oct 2025 20:40:15 +0000 Subject: [PATCH] fix: #674 Use JSON options for API handler --- service/go.mod | 1 + service/go.sum | 2 ++ service/internal/api/api.go | 13 ++++++++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/service/go.mod b/service/go.mod index 67b1f83..dad7d3b 100644 --- a/service/go.mod +++ b/service/go.mod @@ -127,6 +127,7 @@ require ( github.com/stoewer/go-strcase v1.3.1 // indirect github.com/tetratelabs/wazero v1.9.0 // indirect github.com/vbatts/tar-split v0.12.1 // indirect + go.akshayshah.org/connectproto v0.6.0 // indirect go.lsp.dev/jsonrpc2 v0.10.0 // indirect go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2 // indirect go.lsp.dev/protocol v0.12.0 // indirect diff --git a/service/go.sum b/service/go.sum index 3b55233..2582eed 100644 --- a/service/go.sum +++ b/service/go.sum @@ -262,6 +262,8 @@ github.com/vbatts/tar-split v0.12.1/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVO github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.akshayshah.org/connectproto v0.6.0 h1:tqmysQF2AfvUeYS03mRAAZTFpiQeXqhGIDnH1GO2D2U= +go.akshayshah.org/connectproto v0.6.0/go.mod h1:uA9TR/6MhBlLn0fh8VXRyL26EKTJlimWao4jbz7JHbA= go.lsp.dev/jsonrpc2 v0.10.0 h1:Pr/YcXJoEOTMc/b6OTmcR1DPJ3mSWl/SWiU1Cct6VmI= go.lsp.dev/jsonrpc2 v0.10.0/go.mod h1:fmEzIdXPi/rf6d4uFcayi8HpFP1nBF99ERP1htC72Ac= go.lsp.dev/pkg v0.0.0-20210717090340-384b27a52fb2 h1:hCzQgh6UcwbKgNSRurYWSqh8MufqRRPODRBblutn4TE= diff --git a/service/internal/api/api.go b/service/internal/api/api.go index 83c5e1b..c723417 100644 --- a/service/internal/api/api.go +++ b/service/internal/api/api.go @@ -5,6 +5,7 @@ import ( "encoding/json" "connectrpc.com/connect" + "google.golang.org/protobuf/encoding/protojson" apiv1 "github.com/OliveTin/OliveTin/gen/olivetin/api/v1" apiv1connect "github.com/OliveTin/OliveTin/gen/olivetin/api/v1/apiv1connect" @@ -20,6 +21,7 @@ import ( entities "github.com/OliveTin/OliveTin/internal/entities" executor "github.com/OliveTin/OliveTin/internal/executor" installationinfo "github.com/OliveTin/OliveTin/internal/installationinfo" + connectproto "go.akshayshah.org/connectproto" ) type oliveTinAPI struct { @@ -870,5 +872,14 @@ func newServer(ex *executor.Executor) *oliveTinAPI { func GetNewHandler(ex *executor.Executor) (string, http.Handler) { server := newServer(ex) - return apiv1connect.NewOliveTinApiServiceHandler(server) + jsonOpt := connectproto.WithJSON( + protojson.MarshalOptions{ + EmitUnpopulated: true, // https://github.com/OliveTin/OliveTin/issues/674 + }, + protojson.UnmarshalOptions{ + DiscardUnknown: true, + }, + ) + + return apiv1connect.NewOliveTinApiServiceHandler(server, jsonOpt) }