{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE DeriveGeneric #-} -- | Auto generated module by json-autotype module Json.TranscriptTypes where import System.Exit (exitFailure, exitSuccess) import System.IO (stderr, hPutStrLn) import qualified Data.ByteString.Lazy.Char8 as BSL import Data.ByteString.Lazy import System.Environment (getArgs) import Control.Monad (forM_, mzero, join) import Control.Applicative import Data.Aeson.AutoType.Alternative import Data.Aeson(eitherDecode, Value(..), FromJSON(..), ToJSON(..), pairs, (.:), (.:?), (.=), object) import Data.Monoid import Data.Text (Text) import qualified GHC.Generics -- | Workaround for https://github.com/bos/aeson/issues/287. o .:?? val = fmap join (o .:? val) data LatestTopics = LatestTopics { latestTopicsTopics :: [(Maybe Value)], latestTopicsRevision :: Text } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON LatestTopics where parseJSON (Object v) = LatestTopics <$> v .: "topics" <*> v .: "revision" parseJSON _ = mzero data Topics = Topics { topicsLatestTopics :: LatestTopics } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Topics where parseJSON (Object v) = Topics <$> v .: "latest" parseJSON _ = mzero data Tasks = Tasks { } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Tasks where parseJSON (Object v) = return Tasks parseJSON _ = mzero data Progress = Progress { progressStatus :: Text, progressJobId :: Text, progressTasks :: Tasks } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Progress where parseJSON (Object v) = Progress <$> v .: "status" <*> v .: "jobId" <*> v .: "tasks" parseJSON _ = mzero data Job = Job { jobProgress :: Progress } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Job where parseJSON (Object v) = Job <$> v .: "progress" parseJSON _ = mzero data T = T { tUnknown :: [Text] } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON T where parseJSON (Object v) = T <$> v .: "unknown" parseJSON _ = mzero data WordsKeyElt = WordsKeyElt { wordsKeyEltRelevance :: Text, wordsKeyEltT :: T, wordsKeyEltName :: Text } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON WordsKeyElt where parseJSON (Object v) = WordsKeyElt <$> v .: "relevance" <*> v .: "t" <*> v .: "name" parseJSON _ = mzero data LatestKeywords = LatestKeywords { latestKeywordsGroups :: [(Maybe Value)], latestKeywordsWordsKey :: [WordsKeyElt], latestKeywordsRevision :: Text } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON LatestKeywords where parseJSON (Object v) = LatestKeywords <$> v .: "groups" <*> v .: "words" <*> v .: "revision" parseJSON _ = mzero data Keywords = Keywords { keywordsLatestKeywords :: LatestKeywords } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Keywords where parseJSON (Object v) = Keywords <$> v .: "latest" parseJSON _ = mzero data Length = Length { lengthDescriptive :: Text, lengthMilliseconds :: Double } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Length where parseJSON (Object v) = Length <$> v .: "descriptive" <*> v .: "milliseconds" parseJSON _ = mzero data Metadata = Metadata { metadataLength :: Length, metadataContentType :: Text } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Metadata where parseJSON (Object v) = Metadata <$> v .: "length" <*> v .: "contentType" parseJSON _ = mzero data WordsTranscriptsElt = WordsTranscriptsElt { wordsTranscriptsEltW :: Text, wordsTranscriptsEltM :: (Maybe (Text:|:[(Maybe Value)])), wordsTranscriptsEltP :: Double, wordsTranscriptsEltE :: Double, wordsTranscriptsEltC :: Double, wordsTranscriptsEltS :: Double } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON WordsTranscriptsElt where parseJSON (Object v) = WordsTranscriptsElt <$> v .: "w" <*> v .:?? "m" <*> v .: "p" <*> v .: "e" <*> v .: "c" <*> v .: "s" parseJSON _ = mzero data LatestTranscripts = LatestTranscripts { latestTranscriptsEngine :: Text, latestTranscriptsConfidence :: Double, latestTranscriptsName :: Text, latestTranscriptsWordsTranscripts :: [WordsTranscriptsElt], latestTranscriptsRevision :: Text } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON LatestTranscripts where parseJSON (Object v) = LatestTranscripts <$> v .: "engine" <*> v .: "confidence" <*> v .: "name" <*> v .: "words" <*> v .: "revision" parseJSON _ = mzero data Transcripts = Transcripts { transcriptsLatestTranscripts :: LatestTranscripts } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Transcripts where parseJSON (Object v) = Transcripts <$> v .: "latest" parseJSON _ = mzero data Media = Media { mediaStatus :: Text, mediaTopics :: Topics, mediaMediaId :: Text, mediaDateCreated :: Text, mediaJob :: Job, mediaKeywords :: Keywords, mediaMetadata :: Metadata, mediaTranscripts :: Transcripts, mediaDateFinished :: Text } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Media where parseJSON (Object v) = Media <$> v .: "status" <*> v .: "topics" <*> v .: "mediaId" <*> v .: "dateCreated" <*> v .: "job" <*> v .: "keywords" <*> v .: "metadata" <*> v .: "transcripts" <*> v .: "dateFinished" parseJSON _ = mzero data Self = Self { selfHref :: Text } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Self where parseJSON (Object v) = Self <$> v .: "href" parseJSON _ = mzero data Links = Links { linksSelf :: Self } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Links where parseJSON (Object v) = Links <$> v .: "self" parseJSON _ = mzero data Transcript = Transcript { topLevelMedia :: Media, topLevelLinks :: Links } deriving (Show,Eq,GHC.Generics.Generic) instance FromJSON Transcript where parseJSON (Object v) = Transcript <$> v .: "media" <*> v .: "_links" parseJSON _ = mzero parse :: ByteString -> Either String Transcript parse = eitherDecode