aboutsummaryrefslogtreecommitdiff
path: root/metadata/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'metadata/config.go')
-rw-r--r--metadata/config.go54
1 files changed, 24 insertions, 30 deletions
diff --git a/metadata/config.go b/metadata/config.go
index 0f95fbe..65fd7b5 100644
--- a/metadata/config.go
+++ b/metadata/config.go
@@ -21,53 +21,47 @@
// Package metadata contains all of the on disk structures.
// These structures are defined in metadata.proto. The package also
// contains functions for manipulating these structures, specifically:
-// * Reading and Writing the Config file to disk
-// * Getting and Setting Policies for directories
-// * Reasonable defaults for a Policy's EncryptionOptions
+// - Reading and Writing the Config file to disk
+// - Getting and Setting Policies for directories
+// - Reasonable defaults for a Policy's EncryptionOptions
package metadata
import (
"io"
- "strings"
- "github.com/golang/protobuf/jsonpb"
+ "google.golang.org/protobuf/encoding/protojson"
)
// WriteConfig outputs the Config data as nicely formatted JSON
func WriteConfig(config *Config, out io.Writer) error {
- m := jsonpb.Marshaler{
- EmitDefaults: true,
- EnumsAsInts: false,
- Indent: "\t",
- OrigName: true,
+ m := protojson.MarshalOptions{
+ Multiline: true,
+ Indent: "\t",
+ UseProtoNames: true,
+ UseEnumNumbers: false,
+ EmitUnpopulated: true,
}
- if err := m.Marshal(out, config); err != nil {
+ bytes, err := m.Marshal(config)
+ if err != nil {
return err
}
-
- _, err := out.Write([]byte{'\n'})
+ if _, err = out.Write(bytes); err != nil {
+ return err
+ }
+ _, err = out.Write([]byte{'\n'})
return err
}
// ReadConfig writes the JSON data into the config structure
func ReadConfig(in io.Reader) (*Config, error) {
- config := new(Config)
- // Allow (and ignore) unknown fields for forwards compatibility.
- u := jsonpb.Unmarshaler{
- AllowUnknownFields: true,
+ bytes, err := io.ReadAll(in)
+ if err != nil {
+ return nil, err
}
- return config, u.Unmarshal(in, config)
-}
-
-// HasCompatibilityOption returns true if the specified string is in the list of
-// compatibility options. This assumes the compatibility options are in a comma
-// separated string.
-func (c *Config) HasCompatibilityOption(option string) bool {
- options := strings.Split(c.Compatibility, ",")
- for _, o := range options {
- if o == option {
- return true
- }
+ config := new(Config)
+ // Discard unknown fields for forwards compatibility.
+ u := protojson.UnmarshalOptions{
+ DiscardUnknown: true,
}
- return false
+ return config, u.Unmarshal(bytes, config)
}