// 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: {
//     	$id: *"tool/http.Do" | "http" // http for backwards compatibility
//
//     	method: string
//     	url:    string // TODO: make url.URL type
//
//     	request: {
//     		body: *bytes | string
//     		header: [string]:  string | [...string]
//     		trailer: [string]: string | [...string]
//     	}
//     	response: {
//     		status:     string
//     		statusCode: int
//
//     		body: *bytes | string
//     		header: [string]:  string | [...string]
//     		trailer: [string]: string | [...string]
//     	}
//     }
//
//     //  TODO: support serving once we have the cue serve command.
//     // Serve: {
//     //  port: int
//     //
//     //  cert: string
//     //  key:  string
//     //
//     //  handle: [Pattern=string]: Message & {
//     //   pattern: Pattern
//     //  }
//     // }
//
package http
