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 {