traefik/vendor/github.com/exoscale/egoscale/uuid.go

56 lines
1 KiB
Go
Raw Normal View History

2018-09-14 08:06:03 +00:00
package egoscale
import (
"encoding/json"
"fmt"
"github.com/satori/go.uuid"
)
// UUID holds a UUID v4
type UUID struct {
uuid.UUID
}
// Equal returns true if itself is equal to other
func (u UUID) Equal(other UUID) bool {
return uuid.Equal(u.UUID, other.UUID)
}
// UnmarshalJSON unmarshals the raw JSON into the MAC address
func (u *UUID) UnmarshalJSON(b []byte) error {
var s string
if err := json.Unmarshal(b, &s); err != nil {
return err
}
new, err := ParseUUID(s)
if err == nil {
u.UUID = new.UUID
}
return err
}
// MarshalJSON converts the UUID to a string representation
func (u UUID) MarshalJSON() ([]byte, error) {
return []byte(fmt.Sprintf("%q", u.String())), nil
}
// ParseUUID parses a string into a UUID
func ParseUUID(s string) (*UUID, error) {
u, err := uuid.FromString(s)
if err != nil {
return nil, err
}
return &UUID{u}, nil
}
// MustParseUUID acts like ParseUUID but panic in case of a failure
func MustParseUUID(s string) *UUID {
u, e := ParseUUID(s)
if e != nil {
panic(e)
}
return u
}