module Types where import Data.Aeson import qualified Data.ByteString.Lazy.Char8 as BL import qualified Data.Text as T import qualified Data.Map as M import qualified Data.String as S data URL = URL { jurl :: T.Text } deriving (Show, Eq) data VideoID = VideoID { videoID :: T.Text } deriving (Show, Eq) data Thumbnail = Thumbnail { thumbnail :: URL } deriving (Show, Eq) data JSearchResult = JSearchResult { jvideoID :: VideoID, snippet :: Snippet } deriving (Show, Eq) data Snippet = Snippet { jtitle :: T.Text, jdescription :: T.Text, jthumbnails :: Thumbnail } deriving (Show, Eq) data JItems = JItems [JSearchResult] deriving (Show) data SearchResult = SearchResult { title :: T.Text, description :: T.Text, url :: T.Text, thumb :: T.Text } deriving (Show, Eq) data M3U = M3U T.Text deriving (Show) instance S.IsString M3U where fromString = M3U . T.pack instance FromJSON URL where parseJSON (Object v) = URL <$> v .: "url" parseJSON _ = error "invalid parse" instance FromJSON Thumbnail where parseJSON (Object v) = Thumbnail <$> v .: "default" parseJSON _ = error "invalid parse" instance FromJSON VideoID where parseJSON (Object v) = VideoID <$> v .: "videoId" parseJSON _ = error "invalid parse" instance FromJSON Snippet where parseJSON (Object v) = Snippet <$> v .: "title" <*> v .: "description" <*> v .: "thumbnails" parseJSON _ = error "invalid parse" instance FromJSON JSearchResult where parseJSON (Object v) = JSearchResult <$> (v .: "id") <*> (v .: "snippet") parseJSON _ = error "invalid parse" instance FromJSON JItems where parseJSON (Object v) = JItems <$> v .: "items" parseJSON _ = error "invalid parse"