aboutsummaryrefslogblamecommitdiffstats
path: root/vendor/github.com/pborman/uuid/marshal.go
blob: 6621dd54bebd64e457cefe7d6e00ef90654cc301 (plain) (tree)


















































































                                                                           
// Copyright 2016 Google Inc.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package uuid

import (
    "errors"
    "fmt"
)

// MarshalText implements encoding.TextMarshaler.
func (u UUID) MarshalText() ([]byte, error) {
    if len(u) != 16 {
        return nil, nil
    }
    var js [36]byte
    encodeHex(js[:], u)
    return js[:], nil
}

// UnmarshalText implements encoding.TextUnmarshaler.
func (u *UUID) UnmarshalText(data []byte) error {
    if len(data) == 0 {
        return nil
    }
    id := Parse(string(data))
    if id == nil {
        return errors.New("invalid UUID")
    }
    *u = id
    return nil
}

// MarshalBinary implements encoding.BinaryMarshaler.
func (u UUID) MarshalBinary() ([]byte, error) {
    return u[:], nil
}

// UnmarshalBinary implements encoding.BinaryUnmarshaler.
func (u *UUID) UnmarshalBinary(data []byte) error {
    if len(data) == 0 {
        return nil
    }
    if len(data) != 16 {
        return fmt.Errorf("invalid UUID (got %d bytes)", len(data))
    }
    var id [16]byte
    copy(id[:], data)
    *u = id[:]
    return nil
}

// MarshalText implements encoding.TextMarshaler.
func (u Array) MarshalText() ([]byte, error) {
    var js [36]byte
    encodeHex(js[:], u[:])
    return js[:], nil
}

// UnmarshalText implements encoding.TextUnmarshaler.
func (u *Array) UnmarshalText(data []byte) error {
    id := Parse(string(data))
    if id == nil {
        return errors.New("invalid UUID")
    }
    *u = id.Array()
    return nil
}

// MarshalBinary implements encoding.BinaryMarshaler.
func (u Array) MarshalBinary() ([]byte, error) {
    return u[:], nil
}

// UnmarshalBinary implements encoding.BinaryUnmarshaler.
func (u *Array) UnmarshalBinary(data []byte) error {
    if len(data) != 16 {
        return fmt.Errorf("invalid UUID (got %d bytes)", len(data))
    }
    copy(u[:], data)
    return nil
}