Skip to content

Commit

Permalink
Add http server to serve REST request (#13)
Browse files Browse the repository at this point in the history
Signed-off-by: Prasad Ghangal <[email protected]>
  • Loading branch information
PrasadG193 authored Oct 13, 2019
1 parent f5fa6a2 commit 9a90f6a
Show file tree
Hide file tree
Showing 7 changed files with 89 additions and 11 deletions.
7 changes: 7 additions & 0 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,13 @@ builds:
- CGO_ENABLED=0
- GO111MODULE=on
- GO_EXTLINK_ENABLED=0
- id: yaml2go_serve
binary: yaml2go_serve
main: cmd/serve/server.go
env:
- CGO_ENABLED=0
- GO111MODULE=on
- GO_EXTLINK_ENABLED=0
archives:
- replacements:
darwin: Darwin
Expand Down
5 changes: 4 additions & 1 deletion cmd/cli/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,10 @@ func main() {

// Create yaml2go object and invoke Convert()
y2g := yaml2go.New()
result := y2g.Convert("Yaml2Go", []byte(data))
result, err := y2g.Convert("Yaml2Go", []byte(data))
if err != nil {
log.Fatal("Invalid YAML")
}

fmt.Printf(result)
return
Expand Down
49 changes: 49 additions & 0 deletions cmd/serve/server.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package main

import (
"fmt"
"io"
"io/ioutil"
"log"
"net/http"

"github.com/PrasadG193/yaml2go"

"github.com/julienschmidt/httprouter"
"github.com/rs/cors"
)

const API_VERSION = "v1"
const PORT = "8080"

func main() {
router := httprouter.New()
log.Printf("server started accepting requests on port=%s..\n", PORT)
router.POST(fmt.Sprintf("/%s/convert", API_VERSION), handleConvert)

handler := cors.Default().Handler(router)
log.Fatal(http.ListenAndServe(":8080", handler))
}

func handleConvert(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
// Enable CORS
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")

data, err := ioutil.ReadAll(r.Body)
if err != nil {
log.Println(err)
http.Error(w, fmt.Sprintf("Bad Request. Error: %s", err.Error()), http.StatusBadRequest)
return
}

// Create yaml2go object and invoke Convert()
y2g := yaml2go.New()
result, err := y2g.Convert("Yaml2Go", []byte(data))
if err != nil {
log.Println(err)
http.Error(w, fmt.Sprintf("Bad Request. Error: %s", err.Error()), http.StatusBadRequest)
return
}
io.WriteString(w, result)
}
7 changes: 6 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,9 @@ module github.com/PrasadG193/yaml2go

go 1.12

require gopkg.in/yaml.v2 v2.2.2
require (
github.com/julienschmidt/httprouter v1.3.0
github.com/rs/cors v1.7.0
github.com/stretchr/testify v1.4.0
gopkg.in/yaml.v2 v2.2.2
)
12 changes: 12 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
9 changes: 4 additions & 5 deletions yaml2go.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"fmt"
"go/format"
"gopkg.in/yaml.v2"
"log"
"reflect"
"strings"
)
Expand Down Expand Up @@ -38,14 +37,14 @@ func goKeyFormat(key string) string {
}

// Convert transforms map[string]interface{} to go struct
func (yg *Yaml2Go) Convert(structName string, data []byte) string {
func (yg *Yaml2Go) Convert(structName string, data []byte) (string, error) {
yg.StructMap = make(map[string]string)

// Unmarshal to map[string]interface{}
var obj map[string]interface{}
err := yaml.Unmarshal(data, &obj)
if err != nil {
log.Fatal("Failed to parse input")
return "", err
}

yg.AppendResult("Yaml2Go", "// Yaml2Go\n")
Expand All @@ -62,9 +61,9 @@ func (yg *Yaml2Go) Convert(structName string, data []byte) string {
// Convert result into go format
goFormat, err := format.Source([]byte(result))
if err != nil {
log.Fatal("go fmt error:", err)
return "", err
}
return string(goFormat)
return string(goFormat), nil
}

// Structify transforms map key values to struct fields
Expand Down
11 changes: 7 additions & 4 deletions yaml2go_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ import (
"log"
"strings"
"testing"

"github.com/stretchr/testify/assert"
)

func conversion(data []byte) string {
func conversion(data []byte) (string, error) {
y2g := New()
result := y2g.Convert("Yaml2Go", data)
result, err := y2g.Convert("Yaml2Go", data)

return result
return result, err
}

func compareResults(actual []string, expected map[string]bool) error {
Expand Down Expand Up @@ -74,7 +76,8 @@ func TestConvert(t *testing.T) {
if err != nil {
log.Fatal("Failed to access tests/example1.yaml. ", err.Error())
}
resp := conversion(data)
resp, err := conversion(data)
assert.Nil(t, err)

// Compare result
err = compareResults(strings.Split(resp, "\n"), expected["example1"])
Expand Down

0 comments on commit 9a90f6a

Please sign in to comment.