github.com/gohugoio/hugo@v0.88.1/parser/frontmatter.go (about) 1 // Copyright 2015 The Hugo Authors. All rights reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // http://www.apache.org/licenses/LICENSE-2.0 7 // 8 // Unless required by applicable law or agreed to in writing, software 9 // distributed under the License is distributed on an "AS IS" BASIS, 10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package parser 15 16 import ( 17 "encoding/json" 18 "errors" 19 "io" 20 21 "github.com/gohugoio/hugo/parser/metadecoders" 22 23 toml "github.com/pelletier/go-toml/v2" 24 25 yaml "gopkg.in/yaml.v2" 26 ) 27 28 const ( 29 yamlDelimLf = "---\n" 30 tomlDelimLf = "+++\n" 31 ) 32 33 func InterfaceToConfig(in interface{}, format metadecoders.Format, w io.Writer) error { 34 if in == nil { 35 return errors.New("input was nil") 36 } 37 38 switch format { 39 case metadecoders.YAML: 40 b, err := yaml.Marshal(in) 41 if err != nil { 42 return err 43 } 44 45 _, err = w.Write(b) 46 return err 47 48 case metadecoders.TOML: 49 enc := toml.NewEncoder(w) 50 enc.SetIndentTables(true) 51 return enc.Encode(in) 52 case metadecoders.JSON: 53 b, err := json.MarshalIndent(in, "", " ") 54 if err != nil { 55 return err 56 } 57 58 _, err = w.Write(b) 59 if err != nil { 60 return err 61 } 62 63 _, err = w.Write([]byte{'\n'}) 64 return err 65 66 default: 67 return errors.New("unsupported Format provided") 68 } 69 } 70 71 func InterfaceToFrontMatter(in interface{}, format metadecoders.Format, w io.Writer) error { 72 if in == nil { 73 return errors.New("input was nil") 74 } 75 76 switch format { 77 case metadecoders.YAML: 78 _, err := w.Write([]byte(yamlDelimLf)) 79 if err != nil { 80 return err 81 } 82 83 err = InterfaceToConfig(in, format, w) 84 if err != nil { 85 return err 86 } 87 88 _, err = w.Write([]byte(yamlDelimLf)) 89 return err 90 91 case metadecoders.TOML: 92 _, err := w.Write([]byte(tomlDelimLf)) 93 if err != nil { 94 return err 95 } 96 97 err = InterfaceToConfig(in, format, w) 98 99 if err != nil { 100 return err 101 } 102 103 _, err = w.Write([]byte("\n" + tomlDelimLf)) 104 return err 105 106 default: 107 return InterfaceToConfig(in, format, w) 108 } 109 }