Select Git revision
user.go 1.09 KiB
package id
import (
jsoniter "github.com/json-iterator/go"
)
const (
User = "user"
UsersPrefix = "users"
)
type UserID struct {
UserID string `json:"user_id"`
}
func (t *UserID) Type() string { return User }
func (t *UserID) String() string {
return Join(UsersPrefix, t.UserID)
}
func (t *UserID) ToMap() map[string]any {
return map[string]any{
"user_id": t.UserID,
}
}
func (t *UserID) FromMap(m map[string]any) error {
t.UserID = m["user_id"].(string)
return nil
}
func (t *UserID) Validate() error {
if t.UserID == "" {
return ErrInvalidID
}
return nil
}
func parseUserID(parts []string) (*UserID, error) {
var id UserID
if len(parts) != 2 || parts[0] != UsersPrefix {
return nil, ErrInvalidID
}
id.UserID = parts[1]
return &id, nil
}
func (t *UserID) UnmarshalJSON(b []byte) error {
var data string
if err := jsoniter.Unmarshal(b, &data); err != nil {
return err
}
knownID, err := Parse(data)
if err != nil {
return err
}
t.UserID = knownID.(*UserID).UserID
return nil
}
func (t *UserID) MarshalJSON() ([]byte, error) {
return []byte(t.String()), nil
}