From 0efb7931c7bc5c140c019238aa88b9a41d382e61 Mon Sep 17 00:00:00 2001 From: Blake Mizerany Date: Thu, 11 Apr 2024 00:45:07 -0700 Subject: [PATCH] Revert "types/model: remove (*Digest).Scan and Digest.Value (#3589)" This reverts commit 42f2cc408ef2a02cca678574dec375217873d95c. --- types/model/digest.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/types/model/digest.go b/types/model/digest.go index cd25a129..f18c6c86 100644 --- a/types/model/digest.go +++ b/types/model/digest.go @@ -44,9 +44,32 @@ func (d Digest) LogValue() slog.Value { } var ( + _ driver.Valuer = Digest{} + _ sql.Scanner = (*Digest)(nil) _ slog.LogValuer = Digest{} ) +// Scan implements the sql.Scanner interface. +func (d *Digest) Scan(src any) error { + if d.IsValid() { + return errors.New("model.Digest: illegal Scan on valid Digest") + } + switch v := src.(type) { + case string: + *d = ParseDigest(v) + return nil + case []byte: + *d = ParseDigest(string(v)) + return nil + } + return fmt.Errorf("model.Digest: invalid Scan source %T", src) +} + +// Value implements the driver.Valuer interface. +func (d Digest) Value() (driver.Value, error) { + return d.String(), nil +} + // ParseDigest parses a string in the form of "-" into a // Digest. func ParseDigest(s string) Digest {