From d18c38980541fca8ec417bdde19dd2c061059062 Mon Sep 17 00:00:00 2001 From: Nathan Fisher Date: Wed, 24 May 2023 13:45:36 -0400 Subject: [PATCH] New post announcing Dory --- ...dory_a_misfin_protocol_library_in_rust.gmi | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 content/gemlog/dory_a_misfin_protocol_library_in_rust.gmi diff --git a/content/gemlog/dory_a_misfin_protocol_library_in_rust.gmi b/content/gemlog/dory_a_misfin_protocol_library_in_rust.gmi new file mode 100644 index 0000000..86b063f --- /dev/null +++ b/content/gemlog/dory_a_misfin_protocol_library_in_rust.gmi @@ -0,0 +1,36 @@ +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). \ No newline at end of file