Network.Multipart

multipart-0.1.2: HTTP multipart split out of the cgi package

Copyright | (c) Peter Thiemann 2001,2002 (c) Bjorn Bringert 2005-2006
License | BSD-style
Maintainer | Anders Kaseorg <andersk@mit.edu>
Stability | experimental
Portability | non-portable
Safe Haskell | Safe
Language | Haskell2010

Network.Multipart

Contents

- Multi-part messages
- Headers

Description

Parsing of the multipart format from RFC2046. Partly based on code from WASHMail.

Synopsis

- data MultiPart = MultiPart [BodyPart]
- data BodyPart = BodyPart Headers ByteString
- parseMultipartBody :: String -> ByteString -> MultiPart
- hGetMultipartBody :: String -> Handle -> IO MultiPart
- showMultipartBody :: String -> MultiPart -> ByteString
- type Headers = [(HeaderName, String)]
- newtype HeaderName = HeaderName String
- data ContentType = ContentType {
  - ctType :: String
  - ctSubtype :: String
  - ctParameters :: [(String, String)]
  }
- data ContentTransferEncoding = ContentTransferEncoding String
- data ContentDisposition = ContentDisposition String [(String, String)]
- parseContentType :: Monad m => String -> m ContentType
- getContentType :: Monad m => Headers -> m ContentType
- getContentTransferEncoding :: Monad m => Headers -> m ContentTransferEncoding
- getContentDisposition :: Monad m => Headers -> m ContentDisposition

# Multi-part messages

data MultiPart

Constructors

MultiPart [BodyPart] |

Instances

Eq MultiPart |
Ord MultiPart |
Show MultiPart |

data BodyPart

Constructors

BodyPart Headers ByteString |

Instances

Eq BodyPart |
Ord BodyPart |
Show BodyPart |

parseMultipartBody

Arguments

:: String | Boundary
-> ByteString |
-> MultiPart |

Read a multi-part message from a `ByteString`.

hGetMultipartBody

Arguments

:: String | Boundary
-> Handle |
-> IO MultiPart |

Read a multi-part message from a `Handle`. Fails on parse errors.

showMultipartBody :: String -> MultiPart -> ByteString

# Headers

type Headers = [(HeaderName, String)]

HTTP headers.

newtype HeaderName

A string with case insensitive equality and comparisons.

Constructors

HeaderName String |

Instances

Eq HeaderName |
Ord HeaderName |
Show HeaderName |

data ContentType

A MIME media type value. The `Show` instance is derived automatically. Use `showContentType` to obtain the standard string representation. See http://www.ietf.org/rfc/rfc2046.txt for more information about MIME media types.

Constructors

ContentType |
Fields ctType :: String The top-level media type, the general type of the data. Common examples are "text", "image", "audio", "video", "multipart", and "application". ctSubtype :: String The media subtype, the specific data format. Examples include "plain", "html", "jpeg", "form-data", etc. ctParameters :: [(String, String)] Media type parameters. On common example is the charset parameter for the "text" top-level type, e.g. `("charset","ISO-8859-1")`.

Instances

Eq ContentType |
Ord ContentType |
Read ContentType |
Show ContentType |
HeaderValue ContentType |

data ContentTransferEncoding

Constructors

ContentTransferEncoding String |

Instances

Eq ContentTransferEncoding |
Ord ContentTransferEncoding |
Read ContentTransferEncoding |
Show ContentTransferEncoding |
HeaderValue ContentTransferEncoding |

data ContentDisposition

Constructors

ContentDisposition String [(String, String)] |

Instances

Eq ContentDisposition |
Ord ContentDisposition |
Read ContentDisposition |
Show ContentDisposition |
HeaderValue ContentDisposition |

parseContentType :: Monad m => String -> m ContentType

Parse the standard representation of a content-type. If the input cannot be parsed, this function calls `fail` with a (hopefully) informative error message.

getContentType :: Monad m => Headers -> m ContentType

getContentTransferEncoding :: Monad m => Headers -> m ContentTransferEncoding

getContentDisposition :: Monad m => Headers -> m ContentDisposition