Skip to content

Commit

Permalink
add API to expose AnyResolver implementations backed by a DescriptorS…
Browse files Browse the repository at this point in the history
…ource (#102)
  • Loading branch information
jhump authored May 23, 2019
1 parent 09c3d1d commit e5b4fc6
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions format.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,22 @@ const (
FormatText = Format("text")
)

// AnyResolverFromDescriptorSource returns an AnyResolver that will search for
// types using the given descriptor source.
func AnyResolverFromDescriptorSource(source DescriptorSource) jsonpb.AnyResolver {
return &anyResolver{source: source}
}

// AnyResolverFromDescriptorSourceWithFallback returns an AnyResolver that will
// search for types using the given descriptor source and then fallback to a
// special message if the type is not found. The fallback type will render to
// JSON with a "@type" property, just like an Any message, but also with a
// custom "@value" property that includes the binary encoded payload.
func AnyResolverFromDescriptorSourceWithFallback(source DescriptorSource) jsonpb.AnyResolver {
res := anyResolver{source: source}
return &anyResolverWithFallback{AnyResolver: &res}
}

type anyResolver struct {
source DescriptorSource

Expand Down Expand Up @@ -334,8 +350,8 @@ var _ proto.Message = (*unknownAny)(nil)
func RequestParserAndFormatterFor(format Format, descSource DescriptorSource, emitJSONDefaultFields, includeTextSeparator bool, in io.Reader) (RequestParser, Formatter, error) {
switch format {
case FormatJSON:
resolver := anyResolver{source: descSource}
return NewJSONRequestParser(in, &resolver), NewJSONFormatter(emitJSONDefaultFields, anyResolverWithFallback{AnyResolver: &resolver}), nil
resolver := AnyResolverFromDescriptorSource(descSource)
return NewJSONRequestParser(in, resolver), NewJSONFormatter(emitJSONDefaultFields, anyResolverWithFallback{AnyResolver: resolver}), nil
case FormatText:
return NewTextRequestParser(in), NewTextFormatter(includeTextSeparator), nil
default:
Expand Down

0 comments on commit e5b4fc6

Please sign in to comment.