Meta(
    title: "Dory: a Misfin protocol library in Rust",
    summary: Some("Dory is a (WIP) Misfin protocol library in Rust which will implement the protocol in a way that both standalone servers and integrated services can be developed on top of it."),
    published: Some(Time(
        year: 2023,
        month: 5,
        day: 24,
        hour: 17,
        minute: 45,
        second: 18,
    )),
    tags: [
        "misfin",
        "rust",
        "programming",
    ],
)
---
Misfin is a protocol proposal for a messaging and mail service designed along ideas from the small web.
=> gemini://misfin.org/

I'm intrigued enough by the spec that I started working on a Rust crate which implements the spec. It's early days, but the goal is to implement the spec in such a way that it can be used either by a standalone Misfin server or as part of a larger Gemini (or other smallweb) application.

=> https://codeberg.org/jeang3nie/Dory Dory repository on Codeberg

The name Misfin made me think of the character Nemo from the pixar film. My favorite character from that movie was Dory, hence the name.

I plan to limit the scope of the crate as follows:
* Implement opening connections and sending mail/messages for the sending server
* Implement handling a request by the receiving server and sending a response
* I'm not planning to implement the event loop for the receiving server, as the library consumer should have some choice in how they want to set this up.
* I'm considering making client certificates a requirement. The spec recommends them but does not require them.
* Tofu is handled by a `CertificateStore` trait. It will be left to the library consumer to implement the trait on their own data type, so that you have the option of using anything from a simple HashMap to a database connection.

## Status
Right now what exists is mostly a collection of data types, with a fair bit of the functionality just stubbed in. I started with status codes and parsing requests/responses from their raw data, so those parts are all in place. The Tofu verifier is partway written. I took pains to set up the repository to be easy to understand, and there are lots of doc comments specifying what the various types are meant to be (although I haven't gotten around to examples yet). Basically it's a solid base to build on, but not ready for use. I figured I'd go ahead and put it up publicly in case anyone wants to join in (haha).
