// Code generated by cue get go. DO NOT EDIT.

// Package http provides tasks related to the HTTP protocol.
//
// These are the supported tasks:
//
//     Get:    Do & {method: "GET"}
//     Post:   Do & {method: "POST"}
//     Put:    Do & {method: "PUT"}
//     Delete: Do & {method: "DELETE"}
//
//     Do: {
//     	kind: *"tool/http.Do" | "http" // http for backwards compatibility
//
//     	method: string
//     	url:    string // TODO: make url.URL type
//
//     	request: {
//     		body: *bytes | string
//     		header <Name>:  string | [...string]
//     		trailer <Name>: string | [...string]
//     	}
//     	response: {
//     		status:     string
//     		statusCode: int
//
//     		body: *bytes | string
//     		header <Name>:  string | [...string]
//     		trailer <Name>: string | [...string]
//     	}
//     }
//
//     /* TODO: support serving once we have the cue serve command.
//     Serve: {
//     	port: int
//
//     	cert: string
//     	key:  string
//
//     	handle <Pattern>: Message & {
//     		pattern: Pattern
//     	}
//     }
//     */
//
package http
