module Network.Salvia.Handler.Put
( hPutFileSystem
, hPutResource
, hStore
)
where
import Control.Monad.State
import Network.Protocol.Http
import Network.Salvia.Interface
import Network.Salvia.Handler.Body
import Network.Salvia.Handler.Directory
import Network.Salvia.Handler.Error
import Network.Salvia.Handler.File
import Network.Salvia.Handler.FileSystem
import Network.Salvia.Handler.Method
import System.IO
import qualified Data.ByteString.Lazy as B
hPutFileSystem :: (MonadIO m, HttpM' m, SendM m, BodyM Request m) => FilePath -> m ()
hPutFileSystem = hFileTypeDispatcher hDirectoryResource (hPutResource hFileResource)
hPutResource
:: (MonadIO m, BodyM Request m, HttpM' m, SendM m)
=> (FilePath -> m ()) -> FilePath -> m ()
hPutResource def fp = hMethod PUT (hStore fp) (def fp)
hStore
:: (MonadIO m, BodyM Request m, HttpM Response m, SendM m)
=> FilePath -> m ()
hStore name =
do b <- hRawRequestBody
hSafeIO
(withBinaryFile name WriteMode (flip B.hPut b))
(const (hCustomError OK "Document stored."))