36 lines
567 B
Go
36 lines
567 B
Go
|
package jsontypes
|
||
|
|
||
|
import (
|
||
|
"github.com/google/uuid"
|
||
|
)
|
||
|
|
||
|
type UUID uuid.UUID
|
||
|
type UUIDs []UUID
|
||
|
|
||
|
func (u *UUIDs) UUIDs() []uuid.UUID {
|
||
|
r := make([]uuid.UUID, 0, len(*u))
|
||
|
|
||
|
for _, v := range *u {
|
||
|
r = append(r, v.UUID())
|
||
|
}
|
||
|
|
||
|
return r
|
||
|
}
|
||
|
|
||
|
func (u UUID) UUID() uuid.UUID {
|
||
|
return uuid.UUID(u)
|
||
|
}
|
||
|
|
||
|
func (u *UUID) MarshalJSON() ([]byte, error) {
|
||
|
return []byte(`"` + u.UUID().String() + `"`), nil
|
||
|
}
|
||
|
|
||
|
func (u *UUID) UnmarshalJSON(b []byte) error {
|
||
|
id, err := uuid.Parse(string(b[:]))
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
*u = UUID(id)
|
||
|
return nil
|
||
|
}
|