// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file implements the simple output formats (binary and base64).

package source_generator

import (
	"config"
	"encoding/base64"

	"github.com/golang/protobuf/proto"
)

// Outputs the serialized proto.
func BinaryOutput(_, filtered *config.CobaltRegistry) (outputBytes []byte, err error) {
	buf := proto.Buffer{}
	buf.SetDeterministic(true)
	if err := buf.Marshal(filtered); err != nil {
		return nil, err
	}
	return buf.Bytes(), nil
}

// Outputs the serialized proto base64 encoded.
func Base64Output(c, filtered *config.CobaltRegistry) (outputBytes []byte, err error) {
	configBytes, err := BinaryOutput(c, filtered)
	if err != nil {
		return outputBytes, err
	}
	encoder := base64.StdEncoding
	outLen := encoder.EncodedLen(len(configBytes))

	outputBytes = make([]byte, outLen, outLen)
	encoder.Encode(outputBytes, configBytes)
	return outputBytes, nil
}
