diff options
Diffstat (limited to 'Godeps/_workspace/src/github.com/pborman/uuid/sql.go')
-rw-r--r-- | Godeps/_workspace/src/github.com/pborman/uuid/sql.go | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/Godeps/_workspace/src/github.com/pborman/uuid/sql.go b/Godeps/_workspace/src/github.com/pborman/uuid/sql.go new file mode 100644 index 000000000..2d7679e2a --- /dev/null +++ b/Godeps/_workspace/src/github.com/pborman/uuid/sql.go @@ -0,0 +1,40 @@ +// Copyright 2015 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" +) + +// Scan implements sql.Scanner so UUIDs can be read from databases transparently +// Currently, database types that map to string and []byte are supported. Please +// consult database-specific driver documentation for matching types. +func (uuid *UUID) Scan(src interface{}) error { + switch src.(type) { + case string: + // see uuid.Parse for required string format + parsed := Parse(src.(string)) + + if parsed == nil { + return errors.New("Scan: invalid UUID format") + } + + *uuid = parsed + case []byte: + // assumes a simple slice of bytes, just check validity and store + u := UUID(src.([]byte)) + + if u.Variant() == Invalid { + return errors.New("Scan: invalid UUID format") + } + + *uuid = u + default: + return fmt.Errorf("Scan: unable to scan type %T into UUID", src) + } + + return nil +} |