module Pinboard.Client.Types
( PinboardT
, MonadPinboard
, PinboardRequest (..)
, PinboardConfig (..)
, ResultFormatType (..)
, Param (..)
, ParamsBS
) where
import Control.Monad.Reader (ReaderT)
import Data.ByteString (ByteString)
import Data.Text (Text)
import Network.HTTP.Client (Manager)
import Pinboard.Client.Error (PinboardError (..))
import Data.Time.Calendar(Day)
import Data.Time.Clock(UTCTime)
import Control.Monad.Reader.Class(MonadReader)
import Control.Monad.Error.Class(MonadError)
import Control.Monad.IO.Class(MonadIO)
import Control.Monad.Except(ExceptT)
type PinboardT m a = ReaderT (PinboardConfig, Manager) (ExceptT PinboardError m) a
type MonadPinboard m =
( MonadIO m
, MonadReader (PinboardConfig, Manager) m
, MonadError PinboardError m
)
data PinboardRequest = PinboardRequest
{ requestPath :: Text
, requestParams :: [Param]
} deriving Show
data PinboardConfig = PinboardConfig
{ apiToken :: ByteString
, debug :: Bool
} deriving Show
type ParamsBS = [(ByteString, ByteString)]
data ResultFormatType = FormatJson | FormatXml
deriving (Show, Eq)
data Param = Format ResultFormatType
| Tag Text
| Tags Text
| Old Text
| New Text
| Count Int
| Start Int
| Results Int
| Url Text
| Date Day
| DateTime UTCTime
| FromDateTime UTCTime
| ToDateTime UTCTime
| Replace Bool
| Shared Bool
| ToRead Bool
| Description Text
| Extended Text
| Meta Int
deriving (Show, Eq)