Skip to content

Commit

Permalink
fix: pretty logic
Browse files Browse the repository at this point in the history
  • Loading branch information
刘顺钰 committed Jul 1, 2024
1 parent 3ad84f4 commit f5cecc3
Showing 1 changed file with 17 additions and 8 deletions.
25 changes: 17 additions & 8 deletions copier.go
Original file line number Diff line number Diff line change
Expand Up @@ -610,9 +610,14 @@ func set(to, from reflect.Value, deepCopy bool, converters map[converterPair]Typ
}
}

// try convert directly
if from.Type().ConvertibleTo(to.Type()) {
to.Set(from.Convert(to.Type()))
} else if toScanner, ok := to.Addr().Interface().(sql.Scanner); ok {
return true, nil
}

// try Scanner
if toScanner, ok := to.Addr().Interface().(sql.Scanner); ok {
// `from` -> `to`
// *string -> sql.NullString
if from.Kind() == reflect.Ptr {
Expand All @@ -627,10 +632,13 @@ func set(to, from reflect.Value, deepCopy bool, converters map[converterPair]Typ
// string -> sql.NullString
// set `to` by invoking method Scan(`from`)
err := toScanner.Scan(from.Interface())
if err != nil {
return false, nil
if err == nil {
return true, nil
}
} else if fromValuer, ok := driverValuer(from); ok {
}

// try Valuer
if fromValuer, ok := driverValuer(from); ok {
// `from` -> `to`
// sql.NullString -> string
v, err := fromValuer.Value()
Expand All @@ -651,13 +659,14 @@ func set(to, from reflect.Value, deepCopy bool, converters map[converterPair]Typ
return true, nil
}
return false, nil
} else if from.Kind() == reflect.Ptr {
}

// from is ptr
if from.Kind() == reflect.Ptr {
return set(to, from.Elem(), deepCopy, converters)
} else {
return false, nil
}

return true, nil
return false, nil
}

// lookupAndCopyWithConverter looks up the type pair, on success the TypeConverter Fn func is called to copy src to dst field.
Expand Down

0 comments on commit f5cecc3

Please sign in to comment.