...

Package protolator

import "github.com/hyperledger/fabric/common/tools/protolator"
Overview
Index
Subdirectories

Overview ▾

func DeepMarshalJSON

func DeepMarshalJSON(w io.Writer, msg proto.Message) error

DeepMarshalJSON marshals msg to w as JSON, but instead of marshaling bytes fields which contain nested marshaled messages as base64 (like the standard proto encoding), these nested messages are remarshaled as the JSON representation of those messages. This is done so that the JSON representation is as non-binary and human readable as possible.

func DeepUnmarshalJSON

func DeepUnmarshalJSON(r io.Reader, msg proto.Message) error

DeepUnmarshalJSON takes JSON output as generated by DeepMarshalJSON and decodes it into msg This includes re-marshaling the expanded nested elements to binary form

func MostlyDeterministicMarshal

func MostlyDeterministicMarshal(msg proto.Message) ([]byte, error)

MostlyDeterministicMarshal is _NOT_ the function you are looking for. It causes protobuf serialization consistent within a single build. It does not guarantee that the serialization is deterministic across proto versions or proto implementations. It is useful for situations where the same process wants to compare binary messages for equality without needing to unmarshal first, but should not be used generally.

type DecoratedProto

DecoreatedProto should be implemented by the dynamic wrappers applied by the Dynamic*FieldProto interfaces This is necessary for the proto system to unmarshal, because it discovers proto message type by reflection (Rather than by interface definition as it probably should ( https://github.com/golang/protobuf/issues/291 )

type DecoratedProto interface {
    // Underlying returns the underlying proto message which is being dynamically decorated
    Underlying() proto.Message
}

type DynamicFieldProto

DynamicFieldProto should be implemented by protos which have nested fields whose attributes (such as their opaque types) cannot be determined until runtime

type DynamicFieldProto interface {
    // DynamicFields returns the field names which are dynamic
    DynamicFields() []string

    // DynamicFieldProto returns a newly allocated dynamic message, decorating an underlying
    // proto message with the runtime determined function
    DynamicFieldProto(name string, underlying proto.Message) (proto.Message, error)
}

type DynamicMapFieldProto

DynamicMapFieldProto should be implemented by protos which have maps to messages whose attributes (such as their opaque types) cannot be determined until runtime

type DynamicMapFieldProto interface {
    // DynamicFields returns the field names which are dynamic
    DynamicMapFields() []string

    // DynamicMapFieldProto returns a newly allocated dynamic message, decorating an underlying
    // proto message with the runtime determined function
    DynamicMapFieldProto(name string, key string, underlying proto.Message) (proto.Message, error)
}

type DynamicSliceFieldProto

DynamicSliceFieldProto should be implemented by protos which have slices of messages whose attributes (such as their opaque types) cannot be determined until runtime

type DynamicSliceFieldProto interface {
    // DynamicFields returns the field names which are dynamic
    DynamicSliceFields() []string

    // DynamicSliceFieldProto returns a newly allocated dynamic message, decorating an underlying
    // proto message with the runtime determined function
    DynamicSliceFieldProto(name string, index int, underlying proto.Message) (proto.Message, error)
}

type StaticallyOpaqueFieldProto

StaticallyOpaqueFieldProto should be implemented by protos which have bytes fields which are the marshaled value of a fixed type

type StaticallyOpaqueFieldProto interface {
    // StaticallyOpaqueFields returns the field names which contain opaque data
    StaticallyOpaqueFields() []string

    // StaticallyOpaqueFieldProto returns a newly allocated proto message of the correct
    // type for the field name.
    StaticallyOpaqueFieldProto(name string) (proto.Message, error)
}

type StaticallyOpaqueMapFieldProto

StaticallyOpaqueMapFieldProto should be implemented by protos which have maps to bytes fields which are the marshaled value of a fixed type

type StaticallyOpaqueMapFieldProto interface {
    // StaticallyOpaqueFields returns the field names which contain opaque data
    StaticallyOpaqueMapFields() []string

    // StaticallyOpaqueFieldProto returns a newly allocated proto message of the correct
    // type for the field name.
    StaticallyOpaqueMapFieldProto(name string, key string) (proto.Message, error)
}

type StaticallyOpaqueSliceFieldProto

StaticallyOpaqueSliceFieldProto should be implemented by protos which have maps to bytes fields which are the marshaled value of a fixed type

type StaticallyOpaqueSliceFieldProto interface {
    // StaticallyOpaqueFields returns the field names which contain opaque data
    StaticallyOpaqueSliceFields() []string

    // StaticallyOpaqueFieldProto returns a newly allocated proto message of the correct
    // type for the field name.
    StaticallyOpaqueSliceFieldProto(name string, index int) (proto.Message, error)
}

type VariablyOpaqueFieldProto

VariablyOpaqueFieldProto should be implemented by protos which have bytes fields which are the marshaled value depends upon the other contents of the proto

type VariablyOpaqueFieldProto interface {
    // VariablyOpaqueFields returns the field names which contain opaque data
    VariablyOpaqueFields() []string

    // VariablyOpaqueFieldProto returns a newly allocated proto message of the correct
    // type for the field name.
    VariablyOpaqueFieldProto(name string) (proto.Message, error)
}

type VariablyOpaqueMapFieldProto

VariablyOpaqueMapFieldProto should be implemented by protos which have maps to bytes fields which are the marshaled value of a a message type determined by the other contents of the proto

type VariablyOpaqueMapFieldProto interface {
    // VariablyOpaqueFields returns the field names which contain opaque data
    VariablyOpaqueMapFields() []string

    // VariablyOpaqueFieldProto returns a newly allocated proto message of the correct
    // type for the field name.
    VariablyOpaqueMapFieldProto(name string, key string) (proto.Message, error)
}

type VariablyOpaqueSliceFieldProto

VariablyOpaqueSliceFieldProto should be implemented by protos which have maps to bytes fields which are the marshaled value of a a message type determined by the other contents of the proto

type VariablyOpaqueSliceFieldProto interface {
    // VariablyOpaqueFields returns the field names which contain opaque data
    VariablyOpaqueSliceFields() []string

    // VariablyOpaqueFieldProto returns a newly allocated proto message of the correct
    // type for the field name.
    VariablyOpaqueSliceFieldProto(name string, index int) (proto.Message, error)
}

Subdirectories

Name Synopsis
..
testprotos