|
|
|
|
@ -18,9 +18,12 @@ module ATrade.RoboCom.Types (
@@ -18,9 +18,12 @@ module ATrade.RoboCom.Types (
|
|
|
|
|
) where |
|
|
|
|
|
|
|
|
|
import ATrade.Types |
|
|
|
|
import Control.Lens.Setter (over) |
|
|
|
|
import Control.Lens.Tuple (_1) |
|
|
|
|
import Data.Aeson |
|
|
|
|
import Data.Aeson.Key (fromText, toText) |
|
|
|
|
import Data.Aeson.KeyMap as KM |
|
|
|
|
import Data.Aeson.Types |
|
|
|
|
import qualified Data.HashMap.Strict as HM |
|
|
|
|
import qualified Data.Map.Strict as M |
|
|
|
|
import qualified Data.Text as T |
|
|
|
|
import GHC.Generics (Generic) |
|
|
|
|
@ -64,14 +67,14 @@ instance FromJSON Ticker where
@@ -64,14 +67,14 @@ instance FromJSON Ticker where
|
|
|
|
|
return $ Ticker nm als' tf) |
|
|
|
|
where |
|
|
|
|
parseAliases :: Value -> Parser [(String, String)] |
|
|
|
|
parseAliases = withObject "object1" (mapM parseAlias . HM.toList) |
|
|
|
|
parseAliases = withObject "object1" (mapM (parseAlias . over _1 toText) . KM.toList) |
|
|
|
|
parseAlias :: (T.Text, Value) -> Parser (String, String) |
|
|
|
|
parseAlias (k, v) = withText "string1" (\s -> return (T.unpack k, T.unpack s)) v |
|
|
|
|
|
|
|
|
|
instance ToJSON Ticker where |
|
|
|
|
toJSON t = object [ "name" .= code t, |
|
|
|
|
"timeframe" .= timeframeSeconds t, |
|
|
|
|
"aliases" .= Object (HM.fromList $ fmap (\(x, y) -> (T.pack x, String $ T.pack y)) $ aliases t) ] |
|
|
|
|
"aliases" .= Object (KM.fromList $ fmap (\(x, y) -> (fromText . T.pack $ x, String $ T.pack y)) $ aliases t) ] |
|
|
|
|
|
|
|
|
|
data BarSeriesId = BarSeriesId TickerId BarTimeframe |
|
|
|
|
deriving (Show, Eq, Generic, Ord) |
|
|
|
|
|