{-# LANGUAGE DeriveGeneric, OverloadedStrings #-}
module Data.Disney.Experience
( ExperienceRecord (..)
, SNSLinks (..)
, TimeSeriesData (..)
, DailyCount (..)
, TagStats (..)
, TagCount (..)
, YearData (..)
, VisualizationData (..)
) where
import Data.Aeson (FromJSON (..), ToJSON (..), object, toJSON,
withObject, (.:), (.=))
import Data.Text (Text)
import Data.Time (Day)
import GHC.Generics (Generic)
data SNSLinks = SNSLinks
{ SNSLinks -> [Text]
youtube :: [Text]
, SNSLinks -> [Text]
instagram :: [Text]
, SNSLinks -> [Text]
x :: [Text]
, SNSLinks -> [Text]
note :: [Text]
} deriving (SNSLinks -> SNSLinks -> Bool
(SNSLinks -> SNSLinks -> Bool)
-> (SNSLinks -> SNSLinks -> Bool) -> Eq SNSLinks
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SNSLinks -> SNSLinks -> Bool
== :: SNSLinks -> SNSLinks -> Bool
$c/= :: SNSLinks -> SNSLinks -> Bool
/= :: SNSLinks -> SNSLinks -> Bool
Eq, Int -> SNSLinks -> ShowS
[SNSLinks] -> ShowS
SNSLinks -> String
(Int -> SNSLinks -> ShowS)
-> (SNSLinks -> String) -> ([SNSLinks] -> ShowS) -> Show SNSLinks
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SNSLinks -> ShowS
showsPrec :: Int -> SNSLinks -> ShowS
$cshow :: SNSLinks -> String
show :: SNSLinks -> String
$cshowList :: [SNSLinks] -> ShowS
showList :: [SNSLinks] -> ShowS
Show, (forall x. SNSLinks -> Rep SNSLinks x)
-> (forall x. Rep SNSLinks x -> SNSLinks) -> Generic SNSLinks
forall x. Rep SNSLinks x -> SNSLinks
forall x. SNSLinks -> Rep SNSLinks x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SNSLinks -> Rep SNSLinks x
from :: forall x. SNSLinks -> Rep SNSLinks x
$cto :: forall x. Rep SNSLinks x -> SNSLinks
to :: forall x. Rep SNSLinks x -> SNSLinks
Generic)
instance ToJSON SNSLinks where
toJSON :: SNSLinks -> Value
toJSON (SNSLinks [Text]
yt [Text]
ig [Text]
xLinks [Text]
nt) = [Pair] -> Value
object
[ Key
"youtube" Key -> [Text] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Text]
yt
, Key
"instagram" Key -> [Text] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Text]
ig
, Key
"x" Key -> [Text] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Text]
xLinks
, Key
"note" Key -> [Text] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Text]
nt
]
instance FromJSON SNSLinks where
parseJSON :: Value -> Parser SNSLinks
parseJSON = String -> (Object -> Parser SNSLinks) -> Value -> Parser SNSLinks
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"SNSLinks" ((Object -> Parser SNSLinks) -> Value -> Parser SNSLinks)
-> (Object -> Parser SNSLinks) -> Value -> Parser SNSLinks
forall a b. (a -> b) -> a -> b
$ \Object
v -> [Text] -> [Text] -> [Text] -> [Text] -> SNSLinks
SNSLinks
([Text] -> [Text] -> [Text] -> [Text] -> SNSLinks)
-> Parser [Text] -> Parser ([Text] -> [Text] -> [Text] -> SNSLinks)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser [Text]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"youtube"
Parser ([Text] -> [Text] -> [Text] -> SNSLinks)
-> Parser [Text] -> Parser ([Text] -> [Text] -> SNSLinks)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser [Text]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"instagram"
Parser ([Text] -> [Text] -> SNSLinks)
-> Parser [Text] -> Parser ([Text] -> SNSLinks)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser [Text]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"x"
Parser ([Text] -> SNSLinks) -> Parser [Text] -> Parser SNSLinks
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser [Text]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"note"
data ExperienceRecord = ExperienceRecord
{ ExperienceRecord -> Text
title :: Text
, ExperienceRecord -> Day
date :: Day
, ExperienceRecord -> [Text]
disneyTags :: [Text]
, ExperienceRecord -> SNSLinks
snsLinks :: SNSLinks
, ExperienceRecord -> Bool
aiGenerated :: Bool
} deriving (ExperienceRecord -> ExperienceRecord -> Bool
(ExperienceRecord -> ExperienceRecord -> Bool)
-> (ExperienceRecord -> ExperienceRecord -> Bool)
-> Eq ExperienceRecord
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ExperienceRecord -> ExperienceRecord -> Bool
== :: ExperienceRecord -> ExperienceRecord -> Bool
$c/= :: ExperienceRecord -> ExperienceRecord -> Bool
/= :: ExperienceRecord -> ExperienceRecord -> Bool
Eq, Int -> ExperienceRecord -> ShowS
[ExperienceRecord] -> ShowS
ExperienceRecord -> String
(Int -> ExperienceRecord -> ShowS)
-> (ExperienceRecord -> String)
-> ([ExperienceRecord] -> ShowS)
-> Show ExperienceRecord
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ExperienceRecord -> ShowS
showsPrec :: Int -> ExperienceRecord -> ShowS
$cshow :: ExperienceRecord -> String
show :: ExperienceRecord -> String
$cshowList :: [ExperienceRecord] -> ShowS
showList :: [ExperienceRecord] -> ShowS
Show, (forall x. ExperienceRecord -> Rep ExperienceRecord x)
-> (forall x. Rep ExperienceRecord x -> ExperienceRecord)
-> Generic ExperienceRecord
forall x. Rep ExperienceRecord x -> ExperienceRecord
forall x. ExperienceRecord -> Rep ExperienceRecord x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ExperienceRecord -> Rep ExperienceRecord x
from :: forall x. ExperienceRecord -> Rep ExperienceRecord x
$cto :: forall x. Rep ExperienceRecord x -> ExperienceRecord
to :: forall x. Rep ExperienceRecord x -> ExperienceRecord
Generic)
instance ToJSON ExperienceRecord where
toJSON :: ExperienceRecord -> Value
toJSON (ExperienceRecord Text
t Day
d [Text]
tags SNSLinks
sns Bool
ai) = [Pair] -> Value
object
[ Key
"title" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
t
, Key
"date" Key -> Day -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Day
d
, Key
"disneyTags" Key -> [Text] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [Text]
tags
, Key
"snsLinks" Key -> SNSLinks -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= SNSLinks
sns
, Key
"aiGenerated" Key -> Bool -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Bool
ai
]
instance FromJSON ExperienceRecord where
parseJSON :: Value -> Parser ExperienceRecord
parseJSON = String
-> (Object -> Parser ExperienceRecord)
-> Value
-> Parser ExperienceRecord
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"ExperienceRecord" ((Object -> Parser ExperienceRecord)
-> Value -> Parser ExperienceRecord)
-> (Object -> Parser ExperienceRecord)
-> Value
-> Parser ExperienceRecord
forall a b. (a -> b) -> a -> b
$ \Object
v -> Text -> Day -> [Text] -> SNSLinks -> Bool -> ExperienceRecord
ExperienceRecord
(Text -> Day -> [Text] -> SNSLinks -> Bool -> ExperienceRecord)
-> Parser Text
-> Parser (Day -> [Text] -> SNSLinks -> Bool -> ExperienceRecord)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"title"
Parser (Day -> [Text] -> SNSLinks -> Bool -> ExperienceRecord)
-> Parser Day
-> Parser ([Text] -> SNSLinks -> Bool -> ExperienceRecord)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Day
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"date"
Parser ([Text] -> SNSLinks -> Bool -> ExperienceRecord)
-> Parser [Text] -> Parser (SNSLinks -> Bool -> ExperienceRecord)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser [Text]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"disneyTags"
Parser (SNSLinks -> Bool -> ExperienceRecord)
-> Parser SNSLinks -> Parser (Bool -> ExperienceRecord)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser SNSLinks
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"snsLinks"
Parser (Bool -> ExperienceRecord)
-> Parser Bool -> Parser ExperienceRecord
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Bool
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"aiGenerated"
data DailyCount = DailyCount
{ DailyCount -> Day
dcDate :: Day
, DailyCount -> Int
dcCount :: Int
} deriving (DailyCount -> DailyCount -> Bool
(DailyCount -> DailyCount -> Bool)
-> (DailyCount -> DailyCount -> Bool) -> Eq DailyCount
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DailyCount -> DailyCount -> Bool
== :: DailyCount -> DailyCount -> Bool
$c/= :: DailyCount -> DailyCount -> Bool
/= :: DailyCount -> DailyCount -> Bool
Eq, Int -> DailyCount -> ShowS
[DailyCount] -> ShowS
DailyCount -> String
(Int -> DailyCount -> ShowS)
-> (DailyCount -> String)
-> ([DailyCount] -> ShowS)
-> Show DailyCount
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DailyCount -> ShowS
showsPrec :: Int -> DailyCount -> ShowS
$cshow :: DailyCount -> String
show :: DailyCount -> String
$cshowList :: [DailyCount] -> ShowS
showList :: [DailyCount] -> ShowS
Show, (forall x. DailyCount -> Rep DailyCount x)
-> (forall x. Rep DailyCount x -> DailyCount) -> Generic DailyCount
forall x. Rep DailyCount x -> DailyCount
forall x. DailyCount -> Rep DailyCount x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. DailyCount -> Rep DailyCount x
from :: forall x. DailyCount -> Rep DailyCount x
$cto :: forall x. Rep DailyCount x -> DailyCount
to :: forall x. Rep DailyCount x -> DailyCount
Generic)
instance ToJSON DailyCount where
toJSON :: DailyCount -> Value
toJSON (DailyCount Day
d Int
c) = [Pair] -> Value
object
[ Key
"date" Key -> Day -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Day
d
, Key
"count" Key -> Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Int
c
]
instance FromJSON DailyCount where
parseJSON :: Value -> Parser DailyCount
parseJSON = String
-> (Object -> Parser DailyCount) -> Value -> Parser DailyCount
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"DailyCount" ((Object -> Parser DailyCount) -> Value -> Parser DailyCount)
-> (Object -> Parser DailyCount) -> Value -> Parser DailyCount
forall a b. (a -> b) -> a -> b
$ \Object
v -> Day -> Int -> DailyCount
DailyCount
(Day -> Int -> DailyCount)
-> Parser Day -> Parser (Int -> DailyCount)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser Day
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"date"
Parser (Int -> DailyCount) -> Parser Int -> Parser DailyCount
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"count"
data TimeSeriesData = TimeSeriesData
{ TimeSeriesData -> [DailyCount]
daily :: [DailyCount]
} deriving (TimeSeriesData -> TimeSeriesData -> Bool
(TimeSeriesData -> TimeSeriesData -> Bool)
-> (TimeSeriesData -> TimeSeriesData -> Bool) -> Eq TimeSeriesData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TimeSeriesData -> TimeSeriesData -> Bool
== :: TimeSeriesData -> TimeSeriesData -> Bool
$c/= :: TimeSeriesData -> TimeSeriesData -> Bool
/= :: TimeSeriesData -> TimeSeriesData -> Bool
Eq, Int -> TimeSeriesData -> ShowS
[TimeSeriesData] -> ShowS
TimeSeriesData -> String
(Int -> TimeSeriesData -> ShowS)
-> (TimeSeriesData -> String)
-> ([TimeSeriesData] -> ShowS)
-> Show TimeSeriesData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TimeSeriesData -> ShowS
showsPrec :: Int -> TimeSeriesData -> ShowS
$cshow :: TimeSeriesData -> String
show :: TimeSeriesData -> String
$cshowList :: [TimeSeriesData] -> ShowS
showList :: [TimeSeriesData] -> ShowS
Show, (forall x. TimeSeriesData -> Rep TimeSeriesData x)
-> (forall x. Rep TimeSeriesData x -> TimeSeriesData)
-> Generic TimeSeriesData
forall x. Rep TimeSeriesData x -> TimeSeriesData
forall x. TimeSeriesData -> Rep TimeSeriesData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. TimeSeriesData -> Rep TimeSeriesData x
from :: forall x. TimeSeriesData -> Rep TimeSeriesData x
$cto :: forall x. Rep TimeSeriesData x -> TimeSeriesData
to :: forall x. Rep TimeSeriesData x -> TimeSeriesData
Generic)
instance ToJSON TimeSeriesData where
toJSON :: TimeSeriesData -> Value
toJSON (TimeSeriesData [DailyCount]
d) = [Pair] -> Value
object [ Key
"daily" Key -> [DailyCount] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [DailyCount]
d ]
instance FromJSON TimeSeriesData where
parseJSON :: Value -> Parser TimeSeriesData
parseJSON = String
-> (Object -> Parser TimeSeriesData)
-> Value
-> Parser TimeSeriesData
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"TimeSeriesData" ((Object -> Parser TimeSeriesData)
-> Value -> Parser TimeSeriesData)
-> (Object -> Parser TimeSeriesData)
-> Value
-> Parser TimeSeriesData
forall a b. (a -> b) -> a -> b
$ \Object
v -> [DailyCount] -> TimeSeriesData
TimeSeriesData
([DailyCount] -> TimeSeriesData)
-> Parser [DailyCount] -> Parser TimeSeriesData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser [DailyCount]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"daily"
data TagCount = TagCount
{ TagCount -> Text
tcTag :: Text
, TagCount -> Int
tcCount :: Int
} deriving (TagCount -> TagCount -> Bool
(TagCount -> TagCount -> Bool)
-> (TagCount -> TagCount -> Bool) -> Eq TagCount
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TagCount -> TagCount -> Bool
== :: TagCount -> TagCount -> Bool
$c/= :: TagCount -> TagCount -> Bool
/= :: TagCount -> TagCount -> Bool
Eq, Int -> TagCount -> ShowS
[TagCount] -> ShowS
TagCount -> String
(Int -> TagCount -> ShowS)
-> (TagCount -> String) -> ([TagCount] -> ShowS) -> Show TagCount
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TagCount -> ShowS
showsPrec :: Int -> TagCount -> ShowS
$cshow :: TagCount -> String
show :: TagCount -> String
$cshowList :: [TagCount] -> ShowS
showList :: [TagCount] -> ShowS
Show, (forall x. TagCount -> Rep TagCount x)
-> (forall x. Rep TagCount x -> TagCount) -> Generic TagCount
forall x. Rep TagCount x -> TagCount
forall x. TagCount -> Rep TagCount x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. TagCount -> Rep TagCount x
from :: forall x. TagCount -> Rep TagCount x
$cto :: forall x. Rep TagCount x -> TagCount
to :: forall x. Rep TagCount x -> TagCount
Generic)
instance ToJSON TagCount where
toJSON :: TagCount -> Value
toJSON (TagCount Text
t Int
c) = [Pair] -> Value
object
[ Key
"tag" Key -> Text -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Text
t
, Key
"count" Key -> Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Int
c
]
instance FromJSON TagCount where
parseJSON :: Value -> Parser TagCount
parseJSON = String -> (Object -> Parser TagCount) -> Value -> Parser TagCount
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"TagCount" ((Object -> Parser TagCount) -> Value -> Parser TagCount)
-> (Object -> Parser TagCount) -> Value -> Parser TagCount
forall a b. (a -> b) -> a -> b
$ \Object
v -> Text -> Int -> TagCount
TagCount
(Text -> Int -> TagCount)
-> Parser Text -> Parser (Int -> TagCount)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser Text
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"tag"
Parser (Int -> TagCount) -> Parser Int -> Parser TagCount
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"count"
data TagStats = TagStats
{ TagStats -> [TagCount]
tags :: [TagCount]
} deriving (TagStats -> TagStats -> Bool
(TagStats -> TagStats -> Bool)
-> (TagStats -> TagStats -> Bool) -> Eq TagStats
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TagStats -> TagStats -> Bool
== :: TagStats -> TagStats -> Bool
$c/= :: TagStats -> TagStats -> Bool
/= :: TagStats -> TagStats -> Bool
Eq, Int -> TagStats -> ShowS
[TagStats] -> ShowS
TagStats -> String
(Int -> TagStats -> ShowS)
-> (TagStats -> String) -> ([TagStats] -> ShowS) -> Show TagStats
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TagStats -> ShowS
showsPrec :: Int -> TagStats -> ShowS
$cshow :: TagStats -> String
show :: TagStats -> String
$cshowList :: [TagStats] -> ShowS
showList :: [TagStats] -> ShowS
Show, (forall x. TagStats -> Rep TagStats x)
-> (forall x. Rep TagStats x -> TagStats) -> Generic TagStats
forall x. Rep TagStats x -> TagStats
forall x. TagStats -> Rep TagStats x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. TagStats -> Rep TagStats x
from :: forall x. TagStats -> Rep TagStats x
$cto :: forall x. Rep TagStats x -> TagStats
to :: forall x. Rep TagStats x -> TagStats
Generic)
instance ToJSON TagStats where
toJSON :: TagStats -> Value
toJSON (TagStats [TagCount]
ts) = [Pair] -> Value
object [ Key
"tags" Key -> [TagCount] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [TagCount]
ts ]
instance FromJSON TagStats where
parseJSON :: Value -> Parser TagStats
parseJSON = String -> (Object -> Parser TagStats) -> Value -> Parser TagStats
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"TagStats" ((Object -> Parser TagStats) -> Value -> Parser TagStats)
-> (Object -> Parser TagStats) -> Value -> Parser TagStats
forall a b. (a -> b) -> a -> b
$ \Object
v -> [TagCount] -> TagStats
TagStats
([TagCount] -> TagStats) -> Parser [TagCount] -> Parser TagStats
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser [TagCount]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"tags"
data YearData = YearData
{ YearData -> Int
yearNumber :: Int
, YearData -> [DailyCount]
yearlyDaily :: [DailyCount]
} deriving (YearData -> YearData -> Bool
(YearData -> YearData -> Bool)
-> (YearData -> YearData -> Bool) -> Eq YearData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: YearData -> YearData -> Bool
== :: YearData -> YearData -> Bool
$c/= :: YearData -> YearData -> Bool
/= :: YearData -> YearData -> Bool
Eq, Int -> YearData -> ShowS
[YearData] -> ShowS
YearData -> String
(Int -> YearData -> ShowS)
-> (YearData -> String) -> ([YearData] -> ShowS) -> Show YearData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> YearData -> ShowS
showsPrec :: Int -> YearData -> ShowS
$cshow :: YearData -> String
show :: YearData -> String
$cshowList :: [YearData] -> ShowS
showList :: [YearData] -> ShowS
Show, (forall x. YearData -> Rep YearData x)
-> (forall x. Rep YearData x -> YearData) -> Generic YearData
forall x. Rep YearData x -> YearData
forall x. YearData -> Rep YearData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. YearData -> Rep YearData x
from :: forall x. YearData -> Rep YearData x
$cto :: forall x. Rep YearData x -> YearData
to :: forall x. Rep YearData x -> YearData
Generic)
instance ToJSON YearData where
toJSON :: YearData -> Value
toJSON (YearData Int
year [DailyCount]
daily) = [Pair] -> Value
object
[ Key
"year" Key -> Int -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Int
year
, Key
"daily" Key -> [DailyCount] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [DailyCount]
daily
]
instance FromJSON YearData where
parseJSON :: Value -> Parser YearData
parseJSON = String -> (Object -> Parser YearData) -> Value -> Parser YearData
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"YearData" ((Object -> Parser YearData) -> Value -> Parser YearData)
-> (Object -> Parser YearData) -> Value -> Parser YearData
forall a b. (a -> b) -> a -> b
$ \Object
v -> Int -> [DailyCount] -> YearData
YearData
(Int -> [DailyCount] -> YearData)
-> Parser Int -> Parser ([DailyCount] -> YearData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser Int
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"year"
Parser ([DailyCount] -> YearData)
-> Parser [DailyCount] -> Parser YearData
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser [DailyCount]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"daily"
data VisualizationData = VisualizationData
{ VisualizationData -> TimeSeriesData
timeSeries :: TimeSeriesData
, VisualizationData -> TagStats
tagStats :: TagStats
, VisualizationData -> [YearData]
yearlyTimeSeries :: [YearData]
} deriving (VisualizationData -> VisualizationData -> Bool
(VisualizationData -> VisualizationData -> Bool)
-> (VisualizationData -> VisualizationData -> Bool)
-> Eq VisualizationData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: VisualizationData -> VisualizationData -> Bool
== :: VisualizationData -> VisualizationData -> Bool
$c/= :: VisualizationData -> VisualizationData -> Bool
/= :: VisualizationData -> VisualizationData -> Bool
Eq, Int -> VisualizationData -> ShowS
[VisualizationData] -> ShowS
VisualizationData -> String
(Int -> VisualizationData -> ShowS)
-> (VisualizationData -> String)
-> ([VisualizationData] -> ShowS)
-> Show VisualizationData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> VisualizationData -> ShowS
showsPrec :: Int -> VisualizationData -> ShowS
$cshow :: VisualizationData -> String
show :: VisualizationData -> String
$cshowList :: [VisualizationData] -> ShowS
showList :: [VisualizationData] -> ShowS
Show, (forall x. VisualizationData -> Rep VisualizationData x)
-> (forall x. Rep VisualizationData x -> VisualizationData)
-> Generic VisualizationData
forall x. Rep VisualizationData x -> VisualizationData
forall x. VisualizationData -> Rep VisualizationData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. VisualizationData -> Rep VisualizationData x
from :: forall x. VisualizationData -> Rep VisualizationData x
$cto :: forall x. Rep VisualizationData x -> VisualizationData
to :: forall x. Rep VisualizationData x -> VisualizationData
Generic)
instance ToJSON VisualizationData where
toJSON :: VisualizationData -> Value
toJSON (VisualizationData TimeSeriesData
ts TagStats
tg [YearData]
yt) = [Pair] -> Value
object
[ Key
"timeSeries" Key -> TimeSeriesData -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= TimeSeriesData
ts
, Key
"tagStats" Key -> TagStats -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= TagStats
tg
, Key
"yearlyTimeSeries" Key -> [YearData] -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= [YearData]
yt
]
instance FromJSON VisualizationData where
parseJSON :: Value -> Parser VisualizationData
parseJSON = String
-> (Object -> Parser VisualizationData)
-> Value
-> Parser VisualizationData
forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"VisualizationData" ((Object -> Parser VisualizationData)
-> Value -> Parser VisualizationData)
-> (Object -> Parser VisualizationData)
-> Value
-> Parser VisualizationData
forall a b. (a -> b) -> a -> b
$ \Object
v -> TimeSeriesData -> TagStats -> [YearData] -> VisualizationData
VisualizationData
(TimeSeriesData -> TagStats -> [YearData] -> VisualizationData)
-> Parser TimeSeriesData
-> Parser (TagStats -> [YearData] -> VisualizationData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v Object -> Key -> Parser TimeSeriesData
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"timeSeries"
Parser (TagStats -> [YearData] -> VisualizationData)
-> Parser TagStats -> Parser ([YearData] -> VisualizationData)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser TagStats
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"tagStats"
Parser ([YearData] -> VisualizationData)
-> Parser [YearData] -> Parser VisualizationData
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v Object -> Key -> Parser [YearData]
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"yearlyTimeSeries"