diff --git a/frontmatter/frontmatter.go b/frontmatter/frontmatter.go index 1638c39b..85a1bee9 100644 --- a/frontmatter/frontmatter.go +++ b/frontmatter/frontmatter.go @@ -82,6 +82,45 @@ func Unmarshal(content []byte) (interface{}, error) { return data, nil } +// Marshal encodes the interface in a specific format +func Marshal(data interface{}, mark rune) ([]byte, error) { + b := new(bytes.Buffer) + + switch mark { + case '+': + enc := toml.NewEncoder(b) + err := enc.Encode(data) + if err != nil { + return nil, err + } + return b.Bytes(), nil + case '{': + by, err := json.MarshalIndent(data, "", " ") + if err != nil { + return nil, err + } + b.Write(by) + _, err = b.Write([]byte("\n")) + if err != nil { + return nil, err + } + return b.Bytes(), nil + case '-': + by, err := yaml.Marshal(data) + if err != nil { + return nil, err + } + b.Write(by) + _, err = b.Write([]byte("...")) + if err != nil { + return nil, err + } + return b.Bytes(), nil + default: + return nil, errors.New("Unsupported Format provided") + } +} + // Content is the block content type Content struct { Other interface{} diff --git a/handlers/put.go b/handlers/put.go index 22c86a94..fe2acb69 100644 --- a/handlers/put.go +++ b/handlers/put.go @@ -4,14 +4,13 @@ import ( "bytes" "encoding/json" "errors" - "fmt" "io/ioutil" "net/http" "path/filepath" "strings" "github.com/hacdias/caddy-filemanager/config" - "github.com/spf13/hugo/parser" + "github.com/hacdias/caddy-filemanager/frontmatter" ) // PreProccessPUT is used to update a file that was edited @@ -83,27 +82,21 @@ func ParseFrontMatterOnlyFile(data interface{}, filename string) ([]byte, error) } // ParseFrontMatter is the frontmatter parser -func ParseFrontMatter(data interface{}, frontmatter string) ([]byte, error) { +func ParseFrontMatter(data interface{}, front string) ([]byte, error) { var mark rune - switch frontmatter { + switch front { case "toml": - mark = rune('+') + mark = '+' case "json": - mark = rune('{') + mark = '{' case "yaml": - mark = rune('-') + mark = '-' default: - return []byte{}, errors.New("Can't define the frontmatter.") + return nil, errors.New("Unsupported Format provided") } - f, err := parser.InterfaceToFrontMatter(data, mark) - - if err != nil { - return []byte{}, err - } - - return f, nil + return frontmatter.Marshal(data, mark) } // ParseCompleteFile parses a complete file @@ -126,7 +119,6 @@ func ParseCompleteFile(data map[string]interface{}, filename string, frontmatter front, err := ParseFrontMatter(data, frontmatter) if err != nil { - fmt.Println(frontmatter) return []byte{}, err }