diff options
Diffstat (limited to 'haskell/src/SpaceTraders')
-rw-r--r-- | haskell/src/SpaceTraders/APIClient/Client.hs | 11 | ||||
-rw-r--r-- | haskell/src/SpaceTraders/Database/Systems.hs | 4 | ||||
-rw-r--r-- | haskell/src/SpaceTraders/Database/Utils.hs | 11 | ||||
-rw-r--r-- | haskell/src/SpaceTraders/Utils.hs | 22 |
4 files changed, 25 insertions, 23 deletions
diff --git a/haskell/src/SpaceTraders/APIClient/Client.hs b/haskell/src/SpaceTraders/APIClient/Client.hs index 402431f..c7b58e0 100644 --- a/haskell/src/SpaceTraders/APIClient/Client.hs +++ b/haskell/src/SpaceTraders/APIClient/Client.hs @@ -7,7 +7,6 @@ module SpaceTraders.APIClient.Client , APIPaginatedResponse , APIResponse , defaultReq - , fromJSONValue , send , sendPaginated , tokenReq @@ -16,9 +15,6 @@ module SpaceTraders.APIClient.Client import Control.Concurrent import Control.Monad.Reader import Data.Aeson -import Data.Aeson.Types -import qualified Data.ByteString as B -import qualified Data.ByteString.Internal as B import qualified Data.Text as T import qualified Data.Text.Encoding as T import Network.HTTP.Simple @@ -27,6 +23,7 @@ import Network.HTTP.Types.Status import SpaceTraders import SpaceTraders.APIClient.Errors import SpaceTraders.APIClient.Pagination +import SpaceTraders.Utils data FromJSON a => APIMessage a = APIMessage { messageData :: a , messagePagination :: Maybe Pagination @@ -49,12 +46,6 @@ defaultReq = setRequestHost "api.spacetraders.io" tokenReq :: T.Text -> Request tokenReq token = setRequestHeader "Authorization" [T.encodeUtf8 $ "Bearer " <> token] defaultReq -fromJSONValue :: FromJSON a => Value -> Either String a -fromJSONValue = parseEither parseJSON - -int2ByteString :: Int -> B.ByteString -int2ByteString = B.pack . map B.c2w . show - send :: (FromJSON a, HasRequest env, MonadIO m, MonadReader env m) => (Request -> Request) -> m (APIResponse a) send requestBuilder = do response <- sendPaginated Nothing requestBuilder diff --git a/haskell/src/SpaceTraders/Database/Systems.hs b/haskell/src/SpaceTraders/Database/Systems.hs index f71508e..d3d19c7 100644 --- a/haskell/src/SpaceTraders/Database/Systems.hs +++ b/haskell/src/SpaceTraders/Database/Systems.hs @@ -11,8 +11,8 @@ import Data.Maybe import qualified Database.SQLite.Simple as S import SpaceTraders -import SpaceTraders.Database.Utils import SpaceTraders.Model.System +import SpaceTraders.Utils addSystems :: (HasDatabaseConn env, MonadIO m, MonadReader env m) => [System] -> m () addSystems systems = do @@ -23,5 +23,5 @@ addSystems systems = do getSystems :: (HasDatabaseConn env, MonadIO m, MonadReader env m) => m [System] getSystems = do env <- ask - ret <- liftIO $ S.query_ (getConn env) "SELECT data from systems;" + ret <- liftIO $ S.query_ (getConn env) "SELECT data FROM systems;" return . catMaybes $ map (decodeText . head) ret diff --git a/haskell/src/SpaceTraders/Database/Utils.hs b/haskell/src/SpaceTraders/Database/Utils.hs deleted file mode 100644 index 4d933bd..0000000 --- a/haskell/src/SpaceTraders/Database/Utils.hs +++ /dev/null @@ -1,11 +0,0 @@ -module SpaceTraders.Database.Utils - ( decodeText - ) where - -import Data.Aeson -import Data.ByteString.Builder(toLazyByteString) -import qualified Data.Text as T -import Data.Text.Encoding (encodeUtf8Builder) - -decodeText :: FromJSON a => T.Text -> Maybe a -decodeText = decode . toLazyByteString . encodeUtf8Builder diff --git a/haskell/src/SpaceTraders/Utils.hs b/haskell/src/SpaceTraders/Utils.hs new file mode 100644 index 0000000..12bfd6a --- /dev/null +++ b/haskell/src/SpaceTraders/Utils.hs @@ -0,0 +1,22 @@ +module SpaceTraders.Utils + ( decodeText + , fromJSONValue + , int2ByteString + ) where + +import Data.Aeson +import Data.Aeson.Types +import qualified Data.ByteString as B +import qualified Data.ByteString.Builder as B +import qualified Data.ByteString.Internal as B +import qualified Data.Text as T +import qualified Data.Text.Encoding as T + +decodeText :: FromJSON a => T.Text -> Maybe a +decodeText = decode . B.toLazyByteString . T.encodeUtf8Builder + +fromJSONValue :: FromJSON a => Value -> Either String a +fromJSONValue = parseEither parseJSON + +int2ByteString :: Int -> B.ByteString +int2ByteString = B.pack . map B.c2w . show |