mirror of
https://github.com/siderolabs/talos.git
synced 2025-09-12 01:11:11 +02:00
This provides integration layer with discovery service to provide cluster discovery (and transitively KubeSpan peer discovery). Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
48 lines
1.3 KiB
Go
48 lines
1.3 KiB
Go
// 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)
|
|
}
|