// This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. package proto import ( "google.golang.org/protobuf/proto" //nolint:depguard,gci ) // Message is the main interface for protobuf API v2 messages. type Message = proto.Message // Equal reports whether two messages are equal. func Equal(a, b Message) bool { return proto.Equal(a, b) } // vtprotoMessage is the interface for vtproto additions. // // We use only a subset of that interface but include additional methods // to prevent accidental successful type assertion for unrelated types. type vtprotoMessage interface { MarshalVT() ([]byte, error) MarshalToVT([]byte) (int, error) MarshalToSizedBufferVT([]byte) (int, error) UnmarshalVT([]byte) error } // Marshal returns the wire-format encoding of m. func Marshal(m Message) ([]byte, error) { if vm, ok := m.(vtprotoMessage); ok { return vm.MarshalVT() } return proto.Marshal(m) } // Unmarshal parses the wire-format message in b and places the result in m. // The provided message must be mutable (e.g., a non-nil pointer to a message). func Unmarshal(b []byte, m Message) error { if vm, ok := m.(vtprotoMessage); ok { return vm.UnmarshalVT(b) } return proto.Unmarshal(b, m) }