server-go/json.go (24 lines of code) (raw):

// Copyright 2024 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "encoding/json" "fmt" "mime" "net/http" ) // parseRequestJSON populates the target with the fields of the JSON-encoded value in the request // body. It expects the request to have the Content-Type header set to JSON and a body with a // JSON-encoded value complying with the underlying type of target. func parseRequestJSON(r *http.Request, target any) error { contentType := r.Header.Get("Content-Type") mediaType, _, err := mime.ParseMediaType(contentType) if err != nil { return err } if mediaType != "application/json" { return fmt.Errorf("expecting application/json Content-Type. Got %s", mediaType) } dec := json.NewDecoder(r.Body) dec.DisallowUnknownFields() return dec.Decode(target) } // renderResponseJSON encodes res as JSON and writes it to w. func renderResponseJSON(w http.ResponseWriter, res any) { w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(res) }