Skip to content
This repository was archived by the owner on Jul 25, 2024. It is now read-only.

Commit 7c3ac20

Browse files
Add generic dbo.Null
1 parent 7a9c08e commit 7c3ac20

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

dbo/null.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,22 @@ type Null[T comparable] struct {
1414
}
1515

1616
func (n *Null[T]) Scan(value any) (err error) {
17+
defer func() {
18+
if r := recover(); r != nil {
19+
err = errors.From(r)
20+
}
21+
}()
22+
1723
xType := reflect.TypeOf(n.Data)
1824

1925
xValue := reflect.ValueOf(value)
2026
xValueType := xValue.Type()
2127

22-
if !xValueType.AssignableTo(xType) {
28+
if !xValueType.AssignableTo(xType) && !xValueType.ConvertibleTo(xType) {
2329
return errors.New("Invalid value")
2430
}
2531

26-
n.Data = xValue.Interface().(T)
32+
n.Data = xValue.Convert(xType).Interface().(T)
2733
n.Valid = !xValue.IsZero()
2834

2935
return

tests/dbo_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,12 +121,12 @@ func (s *DBOTestSuite) TestNullString() {
121121
func (s *DBOTestSuite) TestNullUint() {
122122
var data dbo.Null[uint]
123123

124-
data.Scan(uint(200))
124+
data.Scan(200)
125125

126126
assert.Equal(s.T(), data.Data, uint(200))
127127
assert.True(s.T(), data.Valid)
128128

129-
data.Scan(uint(0))
129+
data.Scan(0)
130130

131131
assert.Equal(s.T(), data.Data, uint(0))
132132
assert.False(s.T(), data.Valid)

0 commit comments

Comments
 (0)