summaryrefslogtreecommitdiff
path: root/src/Conftrack/Value.hs
diff options
context:
space:
mode:
authorstuebinm2024-05-22 00:04:30 +0200
committerstuebinm2024-05-22 00:04:30 +0200
commitd1446a8435a3cf06371eb6d4ebe25d6491612f4d (patch)
tree3384c966f21caf91cd0ba483b14d5835259029f4 /src/Conftrack/Value.hs
a generic, multi-source config interface
Diffstat (limited to 'src/Conftrack/Value.hs')
-rw-r--r--src/Conftrack/Value.hs38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/Conftrack/Value.hs b/src/Conftrack/Value.hs
new file mode 100644
index 0000000..c5768cc
--- /dev/null
+++ b/src/Conftrack/Value.hs
@@ -0,0 +1,38 @@
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE QuantifiedConstraints #-}
+{-# LANGUAGE ImpredicativeTypes #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE AllowAmbiguousTypes #-}
+
+module Conftrack.Value (Value(..), ConfigError(..), Key(..), ConfigValue(..), Origin(..)) where
+
+import Data.Text(Text)
+import Data.List.NonEmpty (NonEmpty)
+
+data Value =
+ ConfigText Text
+ | ConfigInteger Integer
+ | ConfigOther Text Text
+ deriving Show
+
+newtype Key = Key (NonEmpty Text)
+ deriving newtype (Eq, Ord, Show)
+
+data ConfigError =
+ ParseError
+ | NotPresent
+ deriving Show
+
+class ConfigValue a where
+ fromConfig :: Value -> Either ConfigError a
+
+data Origin = Origin Key Text
+ deriving Show
+
+instance ConfigValue Text where
+ fromConfig (ConfigText a) = Right a
+ fromConfig _ = Left ParseError
+
+instance ConfigValue Integer where
+ fromConfig (ConfigInteger a) = Right a
+ fromConfig _ = Left ParseError