packages feed

chu2-2012.11.16: src/Chu2.agda

module Chu2 where

{-# IMPORT Chu2.FFI #-}

open import Data.List
open import Foreign.Haskell
open import Data.String
open import IO
open import Chu2.ByteString

import IO.Primitive as Prim



data Header : Set where
  _,_ : ByteString → ByteString → Header

{-# COMPILED_DATA Header Chu2.FFI.Header Chu2.FFI.Header #-}

Headers = List Header

data Status : Set where
  OK                        : Status
  Created                   : Status
  Accepted                  : Status
  NoContent                 : Status
  MultipleChoices           : Status
  MovedPermanently          : Status
  SeeOther                  : Status
  NotModified               : Status
  MovedTemporarily          : Status
  BadRequest                : Status
  Unauthorized              : Status
  Forbidden                 : Status
  NotFound                  : Status
  MethodNotAllowed          : Status
  NotAcceptable             : Status
  Conflict                  : Status
  Gone                      : Status
  PreconditionFailed        : Status
  RequestEntityTooLarge     : Status
  RequestURItooLong         : Status
  UnsupportedMediaType      : Status
  NotImplemented            : Status
  ServiceUnavailable        : Status

{-# COMPILED_DATA Status Chu2.FFI.Status
  Chu2.FFI.OK
  Chu2.FFI.Created
  Chu2.FFI.Accepted
  Chu2.FFI.NoContent
  Chu2.FFI.MultipleChoices
  Chu2.FFI.MovedPermanently
  Chu2.FFI.SeeOther
  Chu2.FFI.NotModified
  Chu2.FFI.MovedTemporarily
  Chu2.FFI.BadRequest
  Chu2.FFI.Unauthorized
  Chu2.FFI.Forbidden
  Chu2.FFI.NotFound
  Chu2.FFI.MethodNotAllowed
  Chu2.FFI.NotAcceptable
  Chu2.FFI.Conflict
  Chu2.FFI.Gone
  Chu2.FFI.PreconditionFailed
  Chu2.FFI.RequestEntityTooLarge
  Chu2.FFI.RequestURItooLong
  Chu2.FFI.UnsupportedMediaType
  Chu2.FFI.NotImplemented
  Chu2.FFI.ServiceUnavailable
#-}

Body = ByteString

data Response : Set where
  response : 
      Status
    → Headers
    → Body
    → Response

{-# COMPILED_DATA Response Chu2.FFI.Response Chu2.FFI.Response #-}


data RequestMethod : Set where
  HEAD GET PUT DELETE POST TRACE CONNECT OPTIONS : RequestMethod

{-# COMPILED_DATA RequestMethod Chu2.FFI.RequestMethod
    Chu2.FFI.OPTIONS
    Chu2.FFI.GET
    Chu2.FFI.HEAD
    Chu2.FFI.POST
    Chu2.FFI.PUT
    Chu2.FFI.DELETE
    Chu2.FFI.TRACE
    Chu2.FFI.CONNECT
#-}

data Chu2UrlScheme : Set where
  HTTP HTTPS : Chu2UrlScheme
  
{-# COMPILED_DATA Chu2UrlScheme Chu2.FFI.Chu2UrlScheme
    Chu2.FFI.HTTP
    Chu2.FFI.HTTPS
#-}

ScriptName    =  ByteString
PathInfo      =  ByteString
QueryString   =  ByteString
ServerName    =  ByteString
ServerPort    =  ByteString
HttpHeaders   =  Headers
Chu2Version   =  ByteString
Chu2Input     =  ByteString
Chu2Errors    =  ByteString -> Prim.IO Unit
Chu2Headers   =  Headers

data Env : Set where
  env : 
      RequestMethod  
    → ScriptName     
    → PathInfo       
    → QueryString    
    → ServerName     
    → ServerPort     
    → HttpHeaders    
    → Chu2Version    
    → Chu2UrlScheme  
    → Chu2Input      
    → Chu2Errors     
    → Chu2Headers   
    → Env
  

{-# COMPILED_DATA Env Chu2.FFI.Env Chu2.FFI.Env #-}


Application = Env -> Prim.IO Response