diff --git a/cmd/dump.go b/cmd/dump.go index d413281..a75a6b9 100644 --- a/cmd/dump.go +++ b/cmd/dump.go @@ -12,10 +12,11 @@ import ( ) type dumpEntry struct { - Key string `json:"key"` - Value string `json:"value"` - Encoding string `json:"encoding,omitempty"` - Secret bool `json:"secret,omitempty"` + Key string `json:"key"` + Value string `json:"value"` + Encoding string `json:"encoding,omitempty"` + Secret bool `json:"secret,omitempty"` + ExpiresAt *int64 `json:"expires_at,omitempty"` } var dumpCmd = &cobra.Command{ @@ -76,11 +77,16 @@ func dump(cmd *cobra.Command, args []string) error { if isSecret && !includeSecret { continue } + expiresAt := item.ExpiresAt() if err := item.Value(func(v []byte) error { entry := dumpEntry{ Key: string(key), Secret: isSecret, } + if expiresAt > 0 { + ts := int64(expiresAt) + entry.ExpiresAt = &ts + } switch mode { case "base64": encodeBase64(&entry, v) diff --git a/cmd/restore.go b/cmd/restore.go index 0c29e3b..24001ad 100644 --- a/cmd/restore.go +++ b/cmd/restore.go @@ -81,6 +81,12 @@ func restore(cmd *cobra.Command, args []string) error { } writeEntry := badger.NewEntry([]byte(entry.Key), value).WithMeta(entryMeta) + if entry.ExpiresAt != nil { + if *entry.ExpiresAt < 0 { + return fmt.Errorf("line %d: expires_at must be >= 0", lineNo) + } + writeEntry.ExpiresAt = uint64(*entry.ExpiresAt) + } if err := wb.SetEntry(writeEntry); err != nil { return fmt.Errorf("line %d: %w", lineNo, err)