Browse Source

Revert "types/model: remove (*Digest).Scan and Digest.Value (#3589)"

This reverts commit 42f2cc408ef2a02cca678574dec375217873d95c.
Blake Mizerany 1 year ago
parent
commit
0efb7931c7
1 changed files with 23 additions and 0 deletions
  1. 23 0
      types/model/digest.go

+ 23 - 0
types/model/digest.go

@@ -44,9 +44,32 @@ func (d Digest) LogValue() slog.Value {
 }
 }
 
 
 var (
 var (
+	_ driver.Valuer  = Digest{}
+	_ sql.Scanner    = (*Digest)(nil)
 	_ slog.LogValuer = Digest{}
 	_ 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 "<digest-type>-<digest>" into a
 // ParseDigest parses a string in the form of "<digest-type>-<digest>" into a
 // Digest.
 // Digest.
 func ParseDigest(s string) Digest {
 func ParseDigest(s string) Digest {