Browse Source

Re-use UUID package for Timeuuid generation

Pete Hopkins 12 years ago
parent
commit
a9158a564c
1 changed files with 3 additions and 14 deletions
  1. 3 14
      marshal.go

+ 3 - 14
marshal.go

@@ -920,20 +920,11 @@ func unmarshalTimeUUID(info *TypeInfo, data []byte, value interface{}) error {
 		*v = uuid.FromBytes(data)
 		return nil
 	case *time.Time:
-		if len(data) != 16 {
+		id := uuid.FromBytes(data)
+		if id.Version() != 1 {
 			return unmarshalErrorf("invalid timeuuid")
 		}
-		if version := int(data[6] & 0xF0 >> 4); version != 1 {
-			return unmarshalErrorf("invalid timeuuid")
-		}
-		timestamp := int64(uint64(data[0])<<24|uint64(data[1])<<16|
-			uint64(data[2])<<8|uint64(data[3])) +
-			int64(uint64(data[4])<<40|uint64(data[5])<<32) +
-			int64(uint64(data[6]&0x0F)<<56|uint64(data[7])<<48)
-		timestamp = timestamp - timeEpoch
-		sec := timestamp / 1e7
-		nsec := timestamp - sec
-		*v = time.Unix(int64(sec), int64(nsec)).UTC()
+		*v = id.Time()
 		return nil
 	}
 	return unmarshalErrorf("can not unmarshal %s into %T", info, value)
@@ -1067,5 +1058,3 @@ func (m UnmarshalError) Error() string {
 func unmarshalErrorf(format string, args ...interface{}) UnmarshalError {
 	return UnmarshalError(fmt.Sprintf(format, args...))
 }
-
-var timeEpoch int64 = 0x01B21DD213814000