aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/program/aedifex/artifact/snapshot
diff options
context:
space:
mode:
authorEduardo Julian2021-01-13 17:42:20 -0400
committerEduardo Julian2021-01-13 17:42:20 -0400
commitae56acf791c2ed9bd5865f85fffa00b025d310fe (patch)
treed02c6f67240b27c578b7e8ca17285824eae56497 /stdlib/source/program/aedifex/artifact/snapshot
parent71de092a045dc70ab1c9eead477cf1512b144a87 (diff)
Removed the (ultimately redundant) on_stop function for actors.
Diffstat (limited to 'stdlib/source/program/aedifex/artifact/snapshot')
-rw-r--r--stdlib/source/program/aedifex/artifact/snapshot/build.lux43
-rw-r--r--stdlib/source/program/aedifex/artifact/snapshot/stamp.lux55
-rw-r--r--stdlib/source/program/aedifex/artifact/snapshot/time.lux45
3 files changed, 143 insertions, 0 deletions
diff --git a/stdlib/source/program/aedifex/artifact/snapshot/build.lux b/stdlib/source/program/aedifex/artifact/snapshot/build.lux
new file mode 100644
index 000000000..d9a8b729e
--- /dev/null
+++ b/stdlib/source/program/aedifex/artifact/snapshot/build.lux
@@ -0,0 +1,43 @@
+(.module:
+ [lux #*
+ [abstract
+ [equivalence (#+ Equivalence)]
+ [monad (#+ do)]]
+ [control
+ ["<>" parser
+ ["<.>" xml (#+ Parser)]
+ ["<.>" text]]]
+ [data
+ [text
+ ["%" format]]
+ [format
+ ["." xml (#+ XML)]]]
+ [math
+ [number
+ ["." nat]]]])
+
+(type: #export Build
+ Nat)
+
+(def: #export equivalence
+ (Equivalence Build)
+ nat.equivalence)
+
+(def: tag
+ xml.Tag
+ ["" "buildNumber"])
+
+(def: #export format
+ (-> Build XML)
+ (|>> %.nat
+ #xml.Text
+ list
+ (#xml.Node ..tag xml.attributes)))
+
+(def: #export parser
+ (Parser Build)
+ (do <>.monad
+ [_ (<xml>.node ..tag)]
+ (<text>.embed (<>.codec nat.decimal
+ (<text>.many <text>.decimal))
+ (<xml>.children <xml>.text))))
diff --git a/stdlib/source/program/aedifex/artifact/snapshot/stamp.lux b/stdlib/source/program/aedifex/artifact/snapshot/stamp.lux
new file mode 100644
index 000000000..c1efcc8ee
--- /dev/null
+++ b/stdlib/source/program/aedifex/artifact/snapshot/stamp.lux
@@ -0,0 +1,55 @@
+(.module:
+ [lux #*
+ [abstract
+ [equivalence (#+ Equivalence)]]
+ [data
+ ["." product]
+ [format
+ [xml (#+ XML)]]]]
+ ["." // #_
+ ["#." time (#+ Time)]
+ ["#." build (#+ Build)]])
+
+(type: #export Stamp
+ {#time Time
+ #build Build})
+
+(def: #export equivalence
+ (Equivalence Stamp)
+ ($_ product.equivalence
+ //time.equivalence
+ //build.equivalence
+ ))
+
+(def: time_format
+ (-> Time XML)
+ (|>> //time.format
+ #xml.Text
+ list
+ (#xml.Node ..tag xml.attributes)))
+
+(def: #export (format (^slots [#time #build]))
+ (-> Stamp (List XML))
+ (list (..time_format time)
+ (//build.format build)))
+
+(def: <timestamp>
+ xml.Tag
+ ["" "timestamp"])
+
+## (exception: #export (mismatch {expected Instant} {actual Instant})
+## (exception.report
+## ["Expected" (%.instant expected)]
+## ["Actual" (%.instant actual)]))
+
+(def: time_parser
+ (Parser Time)
+ (do <>.monad
+ [_ (<xml>.node <timestamp>)]
+ (<text>.embed //time.parser
+ (<xml>.children <xml>.text))))
+
+(def: #export parser
+ (Parser Stamp)
+ (<>.and (<xml>.somewhere ..time_parser)
+ (<xml>.somewhere //build.parser)))
diff --git a/stdlib/source/program/aedifex/artifact/snapshot/time.lux b/stdlib/source/program/aedifex/artifact/snapshot/time.lux
new file mode 100644
index 000000000..ea9bf3047
--- /dev/null
+++ b/stdlib/source/program/aedifex/artifact/snapshot/time.lux
@@ -0,0 +1,45 @@
+(.module:
+ [lux #*
+ [abstract
+ [equivalence (#+ Equivalence)]
+ [monad (#+ do)]]
+ [control
+ ["." exception (#+ exception:)]
+ ["<>" parser
+ ["<.>" text]
+ ["<.>" xml (#+ Parser)]]]
+ [data
+ [text
+ ["%" format]]
+ [format
+ ["." xml (#+ XML)]]]
+ [time
+ ["." instant (#+ Instant)]]]
+ ["." /// #_
+ [time
+ ["#." date]
+ ["#." time]]])
+
+(type: #export Time
+ Instant)
+
+(def: #export equivalence
+ (Equivalence Time)
+ instant.equivalence)
+
+(def: separator
+ ".")
+
+(def: #export (format value)
+ (%.Format Time)
+ (%.format (///date.format (instant.date value))
+ ..separator
+ (///time.format (instant.time value))))
+
+(def: #export parser
+ (<text>.Parser Time)
+ (do <>.monad
+ [date ///date.parser
+ _ (<text>.this ..separator)
+ time ///time.parser]
+ (wrap (instant.from_date_time date time))))