Source File
pretty.go
Belonging Package
google.golang.org/grpc/internal/pretty
/*
*
* Copyright 2021 gRPC authors.
*
* 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 pretty defines helper functions to pretty-print structs for logging.
package pretty
import (
protov1
protov2
)
const jsonIndent = " "
// ToJSON marshals the input into a json string.
//
// If marshal fails, it falls back to fmt.Sprintf("%+v").
func ( interface{}) string {
switch ee := .(type) {
case protov1.Message:
:= jsonpb.Marshaler{Indent: jsonIndent}
, := .MarshalToString()
if != nil {
// This may fail for proto.Anys, e.g. for xDS v2, LDS, the v2
// messages are not imported, and this will fail because the message
// is not found.
return fmt.Sprintf("%+v", )
}
return
case protov2.Message:
:= protojson.MarshalOptions{
Multiline: true,
Indent: jsonIndent,
}
, := .Marshal()
if != nil {
// This may fail for proto.Anys, e.g. for xDS v2, LDS, the v2
// messages are not imported, and this will fail because the message
// is not found.
return fmt.Sprintf("%+v", )
}
return string()
default:
, := json.MarshalIndent(, "", jsonIndent)
if != nil {
return fmt.Sprintf("%+v", )
}
return string()
}
}
// FormatJSON formats the input json bytes with indentation.
//
// If Indent fails, it returns the unchanged input as string.
func ( []byte) string {
var bytes.Buffer
:= json.Indent(&, , "", jsonIndent)
if != nil {
return string()
}
return .String()
}
The pages are generated with Golds v0.4.9. (GOOS=linux GOARCH=amd64)