-- TH.hs: WebDAV client library - bits using TH
-- Copyright © 2012-2013  Clint Adams
--
-- vim: softtabstop=4:shiftwidth=4:expandtab
--
-- This program is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.

{-# LANGUAGE TemplateHaskell #-}

module Network.Protocol.HTTP.DAV.TH where

import Control.Lens (makeLenses)
import qualified Data.ByteString as B
import Network.HTTP.Client (Manager, Request)

data Depth = Depth0 | Depth1 | DepthInfinity
instance Read Depth where
    readsPrec :: Int -> ReadS Depth
readsPrec _ x :: String
x
        | String
x String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== "0" = [(Depth
Depth0, "")]
        | String
x String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== "1" = [(Depth
Depth1, "")]
        | String
x String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== "infinity" = [(Depth
DepthInfinity, "")]
        | Bool
otherwise = ReadS Depth
forall (m :: * -> *) a. MonadFail m => String -> m a
fail "invalid"
instance Show Depth where
    show :: Depth -> String
show Depth0 = "0"
    show Depth1 = "1"
    show DepthInfinity = "infinity"

data DAVContext = DAVContext {
    DAVContext -> [ByteString]
_allowedMethods :: [B.ByteString]
  , DAVContext -> Request
_baseRequest :: Request
  , DAVContext -> ByteString
_basicusername :: B.ByteString
  , DAVContext -> ByteString
_basicpassword :: B.ByteString
  , DAVContext -> [ByteString]
_complianceClasses :: [B.ByteString]
  , DAVContext -> Maybe Depth
_depth :: Maybe Depth
  , DAVContext -> Maybe Manager
_httpManager :: Maybe Manager
  , DAVContext -> Maybe ByteString
_lockToken :: Maybe B.ByteString
  , DAVContext -> ByteString
_userAgent :: B.ByteString
}
makeLenses ''DAVContext