aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source
diff options
context:
space:
mode:
authorEduardo Julian2018-12-03 23:42:02 -0400
committerEduardo Julian2018-12-03 23:42:02 -0400
commitf58ab9dfeb272289989bcf5358ddb2faf273eefe (patch)
treed8c94de0946335ea2f340630431ce05b164d3c34 /stdlib/source
parent53d2451a44e1241ec2c4b14e07b501156f792d71 (diff)
Excised contribution relevant to this: https://github.com/LuxLang/lux/pull/34
Diffstat (limited to 'stdlib/source')
-rw-r--r--stdlib/source/lux/time/duration.lux73
1 files changed, 0 insertions, 73 deletions
diff --git a/stdlib/source/lux/time/duration.lux b/stdlib/source/lux/time/duration.lux
index 20ef20c8c..a39e6f9ed 100644
--- a/stdlib/source/lux/time/duration.lux
+++ b/stdlib/source/lux/time/duration.lux
@@ -108,76 +108,3 @@
(structure: #export _ (Monoid Duration)
(def: identity empty)
(def: compose merge))
-
-(def: (encode duration)
- (-> Duration Text)
- (if (:: Equivalence<Duration> = empty duration)
- "+0ms"
- (let [signed? (negative? duration)
- [days time-left] [(query day duration) (frame day duration)]
- days (if signed?
- (int/abs days)
- days)
- time-left (if signed?
- (scale-up -1 time-left)
- time-left)
- [hours time-left] [(query hour time-left) (frame hour time-left)]
- [minutes time-left] [(query minute time-left) (frame minute time-left)]
- [seconds time-left] [(query second time-left) (frame second time-left)]
- millis (to-millis time-left)]
- ($_ text/compose
- (if signed? "-" "+")
- (if (i/= +0 days) "" (text/compose (nat/encode (.nat days)) "D"))
- (if (i/= +0 hours) "" (text/compose (nat/encode (.nat hours)) "h"))
- (if (i/= +0 minutes) "" (text/compose (nat/encode (.nat minutes)) "m"))
- (if (i/= +0 seconds) "" (text/compose (nat/encode (.nat seconds)) "s"))
- (if (i/= +0 millis) "" (text/compose (nat/encode (.nat millis)) "ms"))
- ))))
-
-(def: (lex-section suffix)
- (-> Text (l.Lexer Int))
- (|> (p.codec number.Codec<Text,Int> (l.many l.decimal))
- (p.before (p.and (l.this suffix) (p.not l.alpha)))
- (p.default +0)))
-
-(def: lex-duration
- (l.Lexer Duration)
- (do p.Monad<Parser>
- [signed? (p.or (l.this? "-") (l.this? "+"))
- #let [sign (function (_ raw)
- (case signed?
- (#.Left _)
- (i/* -1 raw)
-
- (#.Right _)
- raw))]
- utc-day (lex-section "D")
- utc-hour (lex-section "h")
- utc-minute (lex-section "m")
- _ (p.assert "Invalid minute."
- (and (i/>= +0 utc-minute)
- (i/<= +59 utc-minute)))
- utc-second (lex-section "s")
- _ (p.assert "Invalid second."
- (and (i/>= +0 utc-second)
- (i/<= +59 utc-second)))
- utc-millis (lex-section "ms")
- _ (p.assert "Invalid milli-seconds."
- (and (i/>= +0 utc-millis)
- (i/<= +999 utc-millis)))]
- (wrap (|> empty
- (merge (scale-up (sign utc-day) day))
- (merge (scale-up (sign utc-hour) hour))
- (merge (scale-up (sign utc-minute) minute))
- (merge (scale-up (sign utc-second) second))
- (merge (scale-up (sign utc-millis) milli))))))
-
-(def: (decode input)
- (-> Text (e.Error Duration))
- (l.run input lex-duration))
-
-(structure: #export _
- {#.doc "For example: +15D21h14m51s827ms"}
- (Codec Text Duration)
- (def: encode encode)
- (def: decode decode))