gopher-protocol
An implementation of Gopher
(gopher://, port 70) and its Gopher+
successor in Rust: an async client, an RFC 1436 menu parser with RFC 4266 URL
synthesis, and the Gopher+ attribute, view, and form model.
This is not the reference implementation of Gopher, and it does not speak for the protocol's community.
Gopher+
Gopher+ (1993) is an upward-compatible superset, so it is not a separate
protocol here: a plain RFC 1436 menu just has no Gopher+ markers on its items.
What it adds is a response header carrying a real length, attribute blocks
(+INFO, +ADMIN, +VIEWS) that describe an item without fetching it,
alternate representations, and +ASK forms for interactive queries.
Gopher-II (the later draft) is not implemented.
Two halves, separately usable
The parsers have no dependencies and are always compiled, Gopher+ included. A consumer that only renders gophermaps takes the crate without the client and pulls no async runtime:
= { = "0.1", = false }
The client rides the default client feature.
Example
# async
Scope
A client and a parser. It does not serve gopher, and it holds no document or
render model: how a Search or Image item should look is the consumer's
decision.
Gopher carries no status line and no MIME type, so Response::mime is a
best-effort inference from the item type, documented as a client convention
rather than part of the RFC.
License
MIT.