34 lines
793 B
Go
34 lines
793 B
Go
// Copyright 2018 The agentx authors
|
|
// Licensed under the LGPLv3 with static-linking exception.
|
|
// See LICENCE file for details.
|
|
|
|
package marshaler
|
|
|
|
import (
|
|
"encoding"
|
|
)
|
|
|
|
// Multi defines a binary marshaler that marshals all child marshalers
|
|
// and concatinate the results.
|
|
type Multi []encoding.BinaryMarshaler
|
|
|
|
// NewMulti returns a new instance of MultiBinaryMarshaler.
|
|
func NewMulti(marshalers ...encoding.BinaryMarshaler) Multi {
|
|
return Multi(marshalers)
|
|
}
|
|
|
|
// MarshalBinary marshals all the binary marshalers and concatinates the results.
|
|
func (m Multi) MarshalBinary() ([]byte, error) {
|
|
result := []byte{}
|
|
|
|
for _, marshaler := range m {
|
|
data, err := marshaler.MarshalBinary()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result = append(result, data...)
|
|
}
|
|
|
|
return result, nil
|
|
}
|