Documentation ¶
Overview ¶
Package channel defines a communications channel that can encode/transmit and decode/receive data records with a configurable framing discipline, and provides some simple framing implementations.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var JSON = Header("application/json")
JSON is a header framing with content type application/json.
var LSP = Header("application/vscode-jsonrpc; charset=utf-8")
LSP is a framing that transmits and receives messages on r and wc using the Language Server Protocol (LSP) framing, defined by the LSP specification at https://microsoft.github.io/language-server-protocol
Functions ¶
This section is empty.
Types ¶
type Channel ¶
type Channel interface { Sender Receiver // Close shuts down the channel, after which no further records may be // sent or received. Close() error }
A Channel represents the ability to transmit and receive data records. A channel does not interpret the contents of a record, but may add and remove framing so that records can be embedded in higher-level protocols. The methods of a Channel need not be safe for concurrent use.
func Line ¶
func Line(r io.Reader, wc io.WriteCloser) Channel
Line is a framing that transmits and receives messages on r and wc with line framing. Each message is terminated by a Unicode LF (10). This framing has the constraint that outbound records may not contain any LF characters.
func Pipe ¶
Pipe creates a pair of connected in-memory channels using the specified framing discipline. Pipe will panic if framing == nil.
type Framing ¶
type Framing func(io.Reader, io.WriteCloser) Channel
A Framing converts a reader and a writer into a Channel with a particular message-framing discipline.
func Header ¶ added in v0.0.8
Header defines a framing that transmits and receives messages using a header prefix similar to HTTP, in which the value of the string is used to describe the content encoding.
Specifically, each message is sent in the format:
Content-Type: <mime-type>\r\n Content-Length: <nbytes>\r\n \r\n <payload>
The length (nbytes) is encoded as decimal digits. For example, given a ContentType value "application/json", the message "123\n" is transmitted as:
Content-Type: application/json\r\n Content-Length: 4\r\n \r\n 123\n
type Receiver ¶ added in v0.0.6
type Receiver interface { // Recv returns the next available record from the channel. If no further // messages are available, it returns io.EOF. Each call to Recv fetches a // single complete record. Recv() ([]byte, error) }
A Receiver represents the ability to receive a message from a channel.