File: sql.go

package info (click to toggle)
golang-github-rickb777-date 1.20.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 460 kB
  • sloc: sh: 63; makefile: 3
file content (41 lines) | stat: -rw-r--r-- 859 bytes parent folder | download
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
package clock

import (
	"database/sql/driver"
	"fmt"
	"time"
)

// Scan parses some value. It implements sql.Scanner,
// https://golang.org/pkg/database/sql/#Scanner
func (c *Clock) Scan(value interface{}) (err error) {
	if value == nil {
		return nil
	}

	return c.scanAny(value)
}

func (c *Clock) scanAny(value interface{}) (err error) {
	err = nil
	switch value.(type) {
	case int64:
		*c = Clock(value.(int64))
	case []byte:
		*c, err = Parse(string(value.([]byte)))
	case string:
		*c, err = Parse(value.(string))
	case time.Time:
		*c = NewAt(value.(time.Time))
	default:
		err = fmt.Errorf("%T %+v is not a meaningful clock", value, value)
	}
	return
}

// Value converts the value to an int64. It implements driver.Valuer,
// https://golang.org/pkg/database/sql/driver/#Valuer
func (c Clock) Value() (driver.Value, error) {

	return int64(c), nil
}