first commit
This commit is contained in:
123
app/Main.hs
Normal file
123
app/Main.hs
Normal file
@@ -0,0 +1,123 @@
|
||||
{-# LANGUAGE DeriveAnyClass #-}
|
||||
{-# LANGUAGE DeriveGeneric #-}
|
||||
{-# LANGUAGE DuplicateRecordFields #-}
|
||||
{-# LANGUAGE GADTs #-}
|
||||
|
||||
module Main where
|
||||
|
||||
import Data.Aeson
|
||||
import Data.Time
|
||||
import GHC.Generics
|
||||
|
||||
data ContentType
|
||||
= Movie
|
||||
| Series
|
||||
| Channel
|
||||
| Tv
|
||||
deriving (Show, Eq, Generic, FromJSON, ToJSON)
|
||||
|
||||
newtype ID = ID String deriving (Show, Eq, Generic, FromJSON, ToJSON)
|
||||
|
||||
newtype IDPrefix = IDPrefix String deriving (Show, Eq, Generic, FromJSON, ToJSON)
|
||||
|
||||
newtype Url = Url String deriving (Show, Eq, Generic, FromJSON, ToJSON)
|
||||
|
||||
data ImageShape = Square | Poster | Landscape deriving (Show, Eq, Generic, FromJSON, ToJSON)
|
||||
|
||||
data YearInfo = Single Int | Range Int Int deriving (Show, Eq, Generic, FromJSON, ToJSON)
|
||||
|
||||
data Trailer = Trailer String | Clip String deriving (Show, Eq, Generic, FromJSON, ToJSON)
|
||||
|
||||
data MetaLink
|
||||
= MetaLink
|
||||
{ name :: String,
|
||||
category :: [String],
|
||||
url :: Url
|
||||
}
|
||||
deriving (Show, Generic, FromJSON, ToJSON)
|
||||
|
||||
data Stream = UrlStream Url | YoutubeStream Url | TorrentStream | ExternalStream MetaLink deriving (Show, Generic, FromJSON, ToJSON)
|
||||
|
||||
data Video = Video
|
||||
{ id :: ID,
|
||||
title :: String,
|
||||
released :: UTCTime,
|
||||
thumbnail :: Maybe Url,
|
||||
streams :: Maybe [Stream],
|
||||
available :: Maybe Bool, -- or maybe just bool is fine
|
||||
episode :: Maybe Int,
|
||||
season :: Maybe Int,
|
||||
trailers :: Maybe [Stream],
|
||||
overview :: Maybe String
|
||||
}
|
||||
deriving (Show, Generic, FromJSON, ToJSON)
|
||||
|
||||
data Feature
|
||||
= Search
|
||||
{ required :: Bool,
|
||||
options :: Maybe [IDPrefix],
|
||||
optionsLimit :: Maybe Int
|
||||
}
|
||||
| Genre
|
||||
{ required :: Bool,
|
||||
options :: Maybe [IDPrefix],
|
||||
optionsLimit :: Maybe Int
|
||||
}
|
||||
| Skip
|
||||
deriving (Show, Generic, FromJSON, ToJSON)
|
||||
|
||||
data Resource a where
|
||||
MetaResource ::
|
||||
{ metaTypes :: [ContentType],
|
||||
metaIdPrefix :: [IDPrefix]
|
||||
} ->
|
||||
Resource MetaData
|
||||
CatalogResource ::
|
||||
{ catalogTypes :: [ContentType],
|
||||
catalogIdPrefix :: [IDPrefix],
|
||||
catalogExtra :: [Feature]
|
||||
} ->
|
||||
Resource Catalog
|
||||
StreamResource ::
|
||||
{ streamTypes :: [ContentType],
|
||||
streamIdPrefix :: [IDPrefix]
|
||||
} ->
|
||||
Resource Stream
|
||||
SubtitleResource ::
|
||||
{ subtitleTypes :: [ContentType],
|
||||
subtitleIdPrefix :: [IDPrefix]
|
||||
} ->
|
||||
Resource Subtitle
|
||||
|
||||
data MetaData = Meta
|
||||
{ id :: ID,
|
||||
contentType :: ContentType,
|
||||
name :: String,
|
||||
genres :: Maybe [String],
|
||||
poster :: Maybe Url,
|
||||
posterShape :: Maybe ImageShape,
|
||||
background :: Maybe Url,
|
||||
logo :: Maybe Url,
|
||||
description :: Maybe String,
|
||||
releaseInfo :: Maybe YearInfo,
|
||||
director :: Maybe [String],
|
||||
cast :: Maybe [String],
|
||||
imdbRating :: Maybe Float,
|
||||
released :: Maybe UTCTime,
|
||||
trailers :: Maybe [Trailer],
|
||||
links :: Maybe [MetaLink],
|
||||
video :: Maybe [Video],
|
||||
runtime :: Maybe String,
|
||||
language :: Maybe String,
|
||||
country :: Maybe String,
|
||||
awards :: Maybe String,
|
||||
website :: Maybe Url
|
||||
}
|
||||
deriving (Show, Generic, FromJSON, ToJSON)
|
||||
|
||||
data Catalog = Catalog {}
|
||||
|
||||
data Subtitle = Subtitle {}
|
||||
|
||||
main :: IO ()
|
||||
main = putStrLn "Hello, Haskell!"
|
||||
Reference in New Issue
Block a user