aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/pborman/uuid/marshal.go
blob: 6621dd54bebd64e457cefe7d6e00ef90654cc301 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// 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
}