blob: 6621dd54bebd64e457cefe7d6e00ef90654cc301 [file] [log] [blame]
Matthias Andreas Benkard832a54e2019-01-29 09:27:38 +01001// Copyright 2016 Google Inc. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package uuid
6
7import (
8 "errors"
9 "fmt"
10)
11
12// MarshalText implements encoding.TextMarshaler.
13func (u UUID) MarshalText() ([]byte, error) {
14 if len(u) != 16 {
15 return nil, nil
16 }
17 var js [36]byte
18 encodeHex(js[:], u)
19 return js[:], nil
20}
21
22// UnmarshalText implements encoding.TextUnmarshaler.
23func (u *UUID) UnmarshalText(data []byte) error {
24 if len(data) == 0 {
25 return nil
26 }
27 id := Parse(string(data))
28 if id == nil {
29 return errors.New("invalid UUID")
30 }
31 *u = id
32 return nil
33}
34
35// MarshalBinary implements encoding.BinaryMarshaler.
36func (u UUID) MarshalBinary() ([]byte, error) {
37 return u[:], nil
38}
39
40// UnmarshalBinary implements encoding.BinaryUnmarshaler.
41func (u *UUID) UnmarshalBinary(data []byte) error {
42 if len(data) == 0 {
43 return nil
44 }
45 if len(data) != 16 {
46 return fmt.Errorf("invalid UUID (got %d bytes)", len(data))
47 }
48 var id [16]byte
49 copy(id[:], data)
50 *u = id[:]
51 return nil
52}
53
54// MarshalText implements encoding.TextMarshaler.
55func (u Array) MarshalText() ([]byte, error) {
56 var js [36]byte
57 encodeHex(js[:], u[:])
58 return js[:], nil
59}
60
61// UnmarshalText implements encoding.TextUnmarshaler.
62func (u *Array) UnmarshalText(data []byte) error {
63 id := Parse(string(data))
64 if id == nil {
65 return errors.New("invalid UUID")
66 }
67 *u = id.Array()
68 return nil
69}
70
71// MarshalBinary implements encoding.BinaryMarshaler.
72func (u Array) MarshalBinary() ([]byte, error) {
73 return u[:], nil
74}
75
76// UnmarshalBinary implements encoding.BinaryUnmarshaler.
77func (u *Array) UnmarshalBinary(data []byte) error {
78 if len(data) != 16 {
79 return fmt.Errorf("invalid UUID (got %d bytes)", len(data))
80 }
81 copy(u[:], data)
82 return nil
83}