// Package crypt contains cryptographic protobuf messages.
package crypt

import (
	"encoding/base64"

	"github.com/rs/zerolog"
	"google.golang.org/protobuf/encoding/protojson"
)

// MarshalZerologObject fills the zerolog event fields.
func (x *SealedMessage) MarshalZerologObject(evt *zerolog.Event) {
	evt.Str("@type", "type.googleapis.com/pomerium.crypt.SealedMessage").
		Str("key_id", x.GetKeyId()).
		Str("data_encryption_key", base64.StdEncoding.EncodeToString(x.GetDataEncryptionKey())).
		Str("message_type", x.GetMessageType()).
		Str("encrypted_message", base64.StdEncoding.EncodeToString(x.GetEncryptedMessage()))
}

// UnmarshalFromRawZerolog unmarshals a raw zerolog object into the sealed message.
func (x *SealedMessage) UnmarshalFromRawZerolog(raw []byte) error {
	opts := protojson.UnmarshalOptions{
		AllowPartial:   true,
		DiscardUnknown: true,
	}
	return opts.Unmarshal(raw, x)
}