From b5fc0df93b8c4f16300737035e14a4922f97a59e Mon Sep 17 00:00:00 2001 From: Levente Batuska Date: Tue, 31 Dec 2024 17:58:13 +0100 Subject: [PATCH] feat(Type): add time.Time as a possible type for Scan --- type/optional.go | 16 ++++++++++++++++ type/result.go | 18 ++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/type/optional.go b/type/optional.go index 9984c70..8c83a6e 100644 --- a/type/optional.go +++ b/type/optional.go @@ -3,6 +3,7 @@ package Type import ( "database/sql" "fmt" + "time" Assert "github.com/lbatuska/goutils/assert" ) @@ -201,6 +202,21 @@ func (opt *Optional[T]) Scan(src interface{}) error { opt.present = true return nil } + + case *time.Time: + if t, ok := src.(time.Time); ok { + *v = t + opt.present = true + return nil + } + if b, ok := src.([]byte); ok { + parsedTime, err := time.Parse(time.RFC3339, string(b)) + if err == nil { + *v = parsedTime + opt.present = true + return nil + } + } } // We couldnt parse the value opt.present = false diff --git a/type/result.go b/type/result.go index 692cfd7..6579c0f 100644 --- a/type/result.go +++ b/type/result.go @@ -4,6 +4,7 @@ import ( "database/sql" "errors" "fmt" + "time" Assert "github.com/lbatuska/goutils/assert" ) @@ -230,6 +231,23 @@ func (res *Result[T]) Scan(src interface{}) error { } res.err = mismatchErr return res.err + + case *time.Time: + if t, ok := src.(time.Time); ok { + *v = t + res.err = nil + return nil + } + if b, ok := src.([]byte); ok { + parsedTime, err := time.Parse(time.RFC3339, string(b)) // or use other formats as necessary + if err == nil { + *v = parsedTime + res.err = nil + return nil + } + } + res.err = mismatchErr + return res.err } // We couldnt parse the value err := fmt.Errorf("Unsupported type %T, and the type doesn't implement sql.Scanner!", src)