module Chu2.FFI where

import Data.ByteString (ByteString)

data RequestMethodData =
     OPTIONS
  |  GET
  |  HEAD
  |  POST
  |  PUT
  |  DELETE
  |  TRACE
  |  CONNECT
  deriving (Show, Read, Eq)



data StatusData = 
    OK
  | Created
  | Accepted
  | NoContent
  | MultipleChoices
  | MovedPermanently
  | SeeOther
  | NotModified
  | MovedTemporarily
  | BadRequest
  | Unauthorized
  | Forbidden
  | NotFound
  | MethodNotAllowed
  | NotAcceptable
  | Conflict
  | Gone
  | PreconditionFailed
  | RequestEntityTooLarge
  | RequestURItooLong
  | UnsupportedMediaType
  | NotImplemented
  | ServiceUnavailable
  deriving (Show)


type Field = String
type Headers = [Header]
type Header = (,) Field Field


type Chu2Errors = Field -> IO ()

data Chu2UrlSchemeData = HTTP | HTTPS
  deriving (Show)
  

data EnvData = EnvData
  {  requestMethod  :: RequestMethodData
  ,  scriptName     :: Field
  ,  pathInfo       :: Field
  ,  queryString    :: Field
  ,  serverName     :: Field
  ,  serverPort     :: Field
  ,  httpHeaders    :: Headers
  ,  chu2UrlScheme  :: Chu2UrlSchemeData
  ,  chu2Input      :: Field
  ,  chu2Headers    :: Headers
  }



data ResponseData = ResponseData
  {  status   :: StatusData
  ,  headers  :: Headers
  ,  body     :: Field
  }
  deriving (Show)