]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - vendor/github.com/satori/go.uuid/sql.go
update vendor and go.mod
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / satori / go.uuid / sql.go
1 // Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
2 //
3 // Permission is hereby granted, free of charge, to any person obtaining
4 // a copy of this software and associated documentation files (the
5 // "Software"), to deal in the Software without restriction, including
6 // without limitation the rights to use, copy, modify, merge, publish,
7 // distribute, sublicense, and/or sell copies of the Software, and to
8 // permit persons to whom the Software is furnished to do so, subject to
9 // the following conditions:
10 //
11 // The above copyright notice and this permission notice shall be
12 // included in all copies or substantial portions of the Software.
13 //
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
22 package uuid
23
24 import (
25 "database/sql/driver"
26 "fmt"
27 )
28
29 // Value implements the driver.Valuer interface.
30 func (u UUID) Value() (driver.Value, error) {
31 return u.String(), nil
32 }
33
34 // Scan implements the sql.Scanner interface.
35 // A 16-byte slice is handled by UnmarshalBinary, while
36 // a longer byte slice or a string is handled by UnmarshalText.
37 func (u *UUID) Scan(src interface{}) error {
38 switch src := src.(type) {
39 case []byte:
40 if len(src) == Size {
41 return u.UnmarshalBinary(src)
42 }
43 return u.UnmarshalText(src)
44
45 case string:
46 return u.UnmarshalText([]byte(src))
47 }
48
49 return fmt.Errorf("uuid: cannot convert %T to UUID", src)
50 }
51
52 // NullUUID can be used with the standard sql package to represent a
53 // UUID value that can be NULL in the database
54 type NullUUID struct {
55 UUID UUID
56 Valid bool
57 }
58
59 // Value implements the driver.Valuer interface.
60 func (u NullUUID) Value() (driver.Value, error) {
61 if !u.Valid {
62 return nil, nil
63 }
64 // Delegate to UUID Value function
65 return u.UUID.Value()
66 }
67
68 // Scan implements the sql.Scanner interface.
69 func (u *NullUUID) Scan(src interface{}) error {
70 if src == nil {
71 u.UUID, u.Valid = Nil, false
72 return nil
73 }
74
75 // Delegate to UUID Scan function
76 u.Valid = true
77 return u.UUID.Scan(src)
78 }