summaryrefslogtreecommitdiff
path: root/fig-frontend/src/Fig/Frontend
diff options
context:
space:
mode:
Diffstat (limited to 'fig-frontend/src/Fig/Frontend')
-rw-r--r--fig-frontend/src/Fig/Frontend/State.hs41
-rw-r--r--fig-frontend/src/Fig/Frontend/Utils.hs2
2 files changed, 43 insertions, 0 deletions
diff --git a/fig-frontend/src/Fig/Frontend/State.hs b/fig-frontend/src/Fig/Frontend/State.hs
new file mode 100644
index 0000000..6053105
--- /dev/null
+++ b/fig-frontend/src/Fig/Frontend/State.hs
@@ -0,0 +1,41 @@
+{-# Language TemplateHaskell #-}
+
+module Fig.Frontend.State where
+
+import Control.Lens.TH (makeLensesFor)
+import Control.Lens ((<>=))
+import Control.Monad.State (runStateT)
+
+import Fig.Prelude
+
+import qualified Data.IORef as IORef
+
+newtype State = State
+ { buffer :: Text
+ }
+makeLensesFor [("buffer", "buffer")] ''State
+
+defaultState :: State
+defaultState = State
+ { buffer = ""
+ }
+
+type StateRef = IORef.IORef State
+
+stateRef :: IO StateRef
+stateRef = IORef.newIORef defaultState
+
+withState ::
+ MonadIO m' =>
+ StateRef ->
+ (forall m. (MonadIO m, MonadState State m) => m a) ->
+ m' a
+withState ref f = do
+ s <- liftIO $ IORef.readIORef ref
+ (res, s') <- liftIO $ runStateT f s
+ liftIO $ IORef.writeIORef ref s'
+ pure res
+
+sayHi :: StateRef -> IO ()
+sayHi ref = withState ref do
+ buffer <>= "hi"
diff --git a/fig-frontend/src/Fig/Frontend/Utils.hs b/fig-frontend/src/Fig/Frontend/Utils.hs
index 1ba1d5f..20234e7 100644
--- a/fig-frontend/src/Fig/Frontend/Utils.hs
+++ b/fig-frontend/src/Fig/Frontend/Utils.hs
@@ -22,6 +22,7 @@ data Config = Config
{ port :: Int
, assetPath :: FilePath
, clientId :: Text
+ , authToken :: Text
} deriving (Show, Eq, Ord)
configCodec :: Toml.TomlCodec Config
@@ -29,6 +30,7 @@ configCodec = do
port <- Toml.int "port" Toml..= (\a -> a.port)
assetPath <- Toml.string "asset_path" Toml..= (\a -> a.assetPath)
clientId <- Toml.text "client_id" Toml..= (\a -> a.clientId)
+ authToken <- Toml.text "auth_token" Toml..= (\a -> a.authToken)
pure $ Config{..}
loadConfig :: FilePath -> IO Config