|
@@ -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 "<digest-type>-<digest>" into a
|
|
|
// Digest.
|
|
|
func ParseDigest(s string) Digest {
|