This commit is contained in:
lbenedar
2026-03-17 12:53:48 +03:00
parent 5206e9ca22
commit dbd1c6eee8
2 changed files with 28 additions and 4 deletions

View File

@@ -12,7 +12,7 @@ func (app *application) createMovieHandler(w http.ResponseWriter, r *http.Reques
var input struct {
Title string `json:"title"`
Year int32 `json:"year"`
Runtime int32 `json:"runtime"`
Runtime data.Runtime `json:"runtime"`
Genres []string `json:"genres"`
}

View File

@@ -1,10 +1,14 @@
package data
import (
"errors"
"fmt"
"strconv"
"strings"
)
var ErrInvalidRuntimeFormat = errors.New("invalid runtime format")
type Runtime int32
func (r Runtime) MarshalJSON() ([]byte, error) {
@@ -13,3 +17,23 @@ func (r Runtime) MarshalJSON() ([]byte, error) {
quotedJSONValue := strconv.Quote(jsonValue)
return []byte(quotedJSONValue), nil
}
func (r *Runtime) UnmarshalJSON(jsonValue []byte) error {
unquotedJSONValue, err := strconv.Unquote(string(jsonValue))
if err != nil {
return ErrInvalidRuntimeFormat
}
parts := strings.Split(unquotedJSONValue, " ")
if len(parts) != 2 || parts[1] != "mins" {
return ErrInvalidRuntimeFormat
}
i, err := strconv.ParseInt(parts[0], 10, 32)
if err != nil {
return ErrInvalidRuntimeFormat
}
*r = Runtime(i)
return nil
}