implement unmarshaling straight into MethodData

This commit is contained in:
Howl 2016-04-12 21:23:02 +02:00
parent b29c64023f
commit c108da9bb3
3 changed files with 16 additions and 6 deletions

View File

@ -2,7 +2,6 @@ package v1
import (
"database/sql"
"encoding/json"
"strconv"
"time"
@ -149,7 +148,7 @@ type friendAddPOSTData struct {
// FriendsAddPOST allows for adding friends. Yup. Easy as that.
func FriendsAddPOST(md common.MethodData) (r common.Response) {
d := friendAddPOSTData{}
err := json.Unmarshal(md.RequestData, &d)
err := md.RequestData.Unmarshal(&d)
if err != nil {
md.Err(err)
r = Err500
@ -220,7 +219,7 @@ func FriendsDelGET(md common.MethodData) common.Response {
// FriendsDelPOST allows for deleting friends.
func FriendsDelPOST(md common.MethodData) (r common.Response) {
d := friendAddPOSTData{}
err := json.Unmarshal(md.RequestData, &d)
err := md.RequestData.Unmarshal(&d)
if err != nil {
md.Err(err)
r = Err500

View File

@ -3,7 +3,6 @@ package v1
import (
"crypto/md5"
"database/sql"
"encoding/json"
"fmt"
"github.com/osuripple/api/common"
@ -31,7 +30,7 @@ type tokenNewOutData struct {
// TokenNewPOST is the handler for POST /token/new.
func TokenNewPOST(md common.MethodData) (r common.Response) {
data := tokenNewInData{}
err := json.Unmarshal(md.RequestData, &data)
err := md.RequestData.Unmarshal(&data)
if err != nil {
r = ErrBadJSON
return

View File

@ -2,6 +2,7 @@ package common
import (
"database/sql"
"encoding/json"
"github.com/gin-gonic/gin"
)
@ -10,7 +11,7 @@ import (
type MethodData struct {
User Token
DB *sql.DB
RequestData []byte
RequestData RequestData
C *gin.Context
}
@ -23,3 +24,14 @@ func (md MethodData) Err(err error) {
func (md MethodData) ID() int {
return md.User.UserID
}
// RequestData is the body of a request. It is wrapped into this type
// to implement the Unmarshal function, which is just a shorthand to
// json.Unmarshal.
type RequestData []byte
// Unmarshal json-decodes Requestdata into a value. Basically a
// shorthand to json.Unmarshal.
func (r RequestData) Unmarshal(into interface{}) error {
return json.Unmarshal([]byte(r), into)
}