{-# LANGUAGE OverloadedStrings #-}
module AcousticBrainz.Version where
import Data.Aeson
import Data.Aeson.Types
data Version = Version
{ _essentia :: EssentiaVersion
, _extractor :: Text
, _gaia :: Maybe GaiaVersion
, _modelsEssentiaGitSha :: Text
} deriving(Eq, Ord, Read, Show)
instance FromJSON Version where
parseJSON value = flip (withObject "version") value $ \v -> Version
<$> parseJSON value
<*> v .: "extractor"
<*> ((Just <$> parseJSON value) <|> pure Nothing)
<*> (v .: "models_essentia_git_sha" <|> pure mempty)
data EssentiaVersion = EssentiaVersion
{ _essentiaVersion :: Text
, _essentiaBuildSha :: Text
, _essentiaGitSha :: Text
} deriving(Eq, Ord, Read, Show)
instance FromJSON EssentiaVersion where
parseJSON = withObject "EssentiaVersion" $ \v -> EssentiaVersion
<$> v .: "essentia"
<*> v .: "essentia_build_sha"
<*> v .: "essentia_git_sha"
data GaiaVersion = GaiaVersion
{ _gaiaVersion :: Text
, _gaiaGitSha :: Text
} deriving(Eq, Ord, Read, Show)
instance FromJSON GaiaVersion where
parseJSON = withObject "GaiaVersion" $ \v -> GaiaVersion
<$> v .: "gaia"
<*> v .: "gaia_git_sha"