func (i *Image) UnmarshalJSON(bytes []byte) error {
	image := string(bytes)
	image = strings.Trim(image, `"`)
	if strings.ToLower(image) == "null" {
		i.Valid = false
		return nil
	}
	i.Valid = true
	i.Value = image
	return nil
}
TODO: check: if we can extract these methods to a generic methods/type and attach these to the type
package gokit_realworld
import (
	"encoding/json"
	"errors"
	"golang.org/x/crypto/bcrypt"
	"strings"
)
var (
	ErrResourceNotFound       = Error{ENotFound, errors.New("resource not found")}
	ErrUserNotFound           = Error{ENotFound, errors.New("user not found")}
	ErrUserAlreadyExists      = Error{EConflict, errors.New("user already exists")}
	ErrIncorrectPasswordError = Error{EIncorrectPassword, errors.New("incorrect password")}
)
type Bio struct {
	Value string
	Valid bool
}
func (b *Bio) UnmarshalJSON(bytes []byte) error {
	bio := string(bytes)
	bio = strings.Trim(bio, `"`)
	if strings.ToLower(bio) == "null" {
		b.Valid = false
		return nil
	}
	b.Valid = true
	b.Value = bio
	return nil
}
func (b Bio) MarshalJSON() ([]byte, error) {
	if b.Valid {
		return json.Marshal(b.Value)
	}
	return json.Marshal(nil)
}
type Image struct {
	Value string
	Valid bool
}