changeset 1471:cfec585882ce default tip

add: support to store times with timezones (uses ref, which we usually do not serialize atm)
author sam <sam@basx.dev>
date Wed, 02 Apr 2025 22:41:48 +0700
parents 63364723d460
children
files semicongine/storage.nim
diffstat 1 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/semicongine/storage.nim	Wed Apr 02 00:49:02 2025 +0700
+++ b/semicongine/storage.nim	Wed Apr 02 22:41:48 2025 +0700
@@ -117,6 +117,9 @@
 
 proc writeValue[T](s: Stream, value: T)
 
+proc writeTimeValue[T](s: Stream, value: T) =
+  s.write(value.toTime().toUnixFloat().float64)
+
 proc writeNumericValue[T](s: Stream, value: T) =
   s.write(value)
 
@@ -139,7 +142,9 @@
     writeValue(s, value)
 
 proc writeValue[T](s: Stream, value: T) =
-  when distinctBase(T) is SomeOrdinal or T is SomeFloat:
+  when distinctBase(T) is DateTime:
+    writeTimeValue[T](s, value)
+  elif distinctBase(T) is SomeOrdinal or T is SomeFloat:
     writeNumericValue[T](s, value)
   elif distinctBase(T) is seq:
     writeSeqValue[T](s, value)
@@ -175,6 +180,11 @@
 
 proc loadValue[T](s: Stream): T
 
+proc loadTimeValue[T](s: Stream): T =
+  var t: float64
+  read(s, t)
+  fromUnixFloat(t).utc()
+
 proc loadNumericValue[T](s: Stream): T =
   read(s, result)
 
@@ -205,7 +215,9 @@
       value = loadValue[typeof(value)](s)
 
 proc loadValue[T](s: Stream): T =
-  when distinctBase(T) is SomeOrdinal or distinctBase(T) is SomeFloat:
+  when distinctBase(T) is DateTime:
+    loadTimeValue[T](s)
+  elif distinctBase(T) is SomeOrdinal or distinctBase(T) is SomeFloat:
     loadNumericValue[T](s)
   elif distinctBase(T) is seq:
     loadSeqValue[T](s)