From b29d28459117a75863ba1d52a77756a1519f8bb4 Mon Sep 17 00:00:00 2001
From: Henrique Dias <hacdias@gmail.com>
Date: Mon, 16 Jan 2017 20:03:44 +0000
Subject: [PATCH] fix #69

Former-commit-id: b46dcb6ccb1b92ca72e6c539b662efa44344ba8f
---
 frontmatter/frontmatter.go | 39 ++++++++++++++++++++++++++++++++++++++
 handlers/put.go            | 24 ++++++++---------------
 2 files changed, 47 insertions(+), 16 deletions(-)

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
 	}