Merge pull request #1121 from yquansah/yq-override-json

feat: add definition for overridable json engine
pull/1144/head v2.4.0
Joey 2021-01-31 07:56:41 +01:00 committed by GitHub
commit 267fd5ec59
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 43 additions and 1 deletions

11
app.go
View File

@ -12,6 +12,7 @@ package fiber
import (
"bufio"
"crypto/tls"
"encoding/json"
"errors"
"fmt"
"net"
@ -272,6 +273,13 @@ type Config struct {
//
// Default: false
// RedirectFixedPath bool
// When set by an external client of Fiber it will use the provided implementation of a
// JSONMarshal
//
// Allowing for flexibility in using another json library for encoding
// Default: json.Marshal
JSONEncoder utils.JSONMarshal `json:"-"`
}
// Static defines configuration options when defining static assets.
@ -385,6 +393,9 @@ func New(config ...Config) *App {
if app.config.ErrorHandler == nil {
app.config.ErrorHandler = DefaultErrorHandler
}
if app.config.JSONEncoder == nil {
app.config.JSONEncoder = json.Marshal
}
// Init app
app.init()

2
ctx.go
View File

@ -536,7 +536,7 @@ func (c *Ctx) Is(extension string) bool {
// and a nil slice encodes as the null JSON value.
// This method also sets the content header to application/json.
func (c *Ctx) JSON(data interface{}) error {
raw, err := json.Marshal(data)
raw, err := c.app.config.JSONEncoder(data)
if err != nil {
return err
}

5
utils/json_marshal.go Normal file
View File

@ -0,0 +1,5 @@
package utils
// JSONMarshal is the standard definition of representing a Go structure in
// json format
type JSONMarshal func(interface{}) ([]byte, error)

View File

@ -0,0 +1,26 @@
package utils
import (
"encoding/json"
"testing"
)
func TestDefaultJSONEncoder(t *testing.T) {
type SampleStructure struct {
ImportantString string `json:"important_string"`
}
var (
sampleStructure = &SampleStructure{
ImportantString: "Hello World",
}
importantString = `{"important_string":"Hello World"}`
jsonEncoder JSONMarshal = json.Marshal
)
raw, err := jsonEncoder(sampleStructure)
AssertEqual(t, err, nil)
AssertEqual(t, string(raw), importantString)
}