Crate windmark

source ·
Expand description

Windmark

crates.io docs.rs github.com

Windmark is an elegant and highly performant, async Gemini server framework for the modern age!

Now supporting both Tokio and async-std!

Usage

A macro-based “struct-router” is currently being developed for Windmark. A subset of Windmark’s features are currently available for use through it. Check out Rossweisse for more information!

Features

FeatureDescription
defaultBase Windmark framework using Tokio
loggerEnables the default pretty_env_logger integration
auto-deduce-mimeExposes Responses and macros that automatically fill MIMEs for non-Gemini responses
response-macrosSimple macros for all Responses
tokioMarks Tokio as the asynchronous runtime
async-stdMarks async-std as the asynchronous runtime
preludeExposes the prelude module containing the most used Windmark features

Add Windmark and Tokio as Dependencies

# Cargo.toml

[dependencies]
windmark = "0.3.9"
tokio = { version = "1.26.0", features = ["full"] }

# If you would like to use the built-in logger (recommended)
# windmark = { version = "0.3.9", features = ["logger"] }

# If you would like to use the built-in MIME dedection when `Success`-ing a file
# (recommended)
# windmark = { version = "0.3.9", features = ["auto-deduce-mime"] }

# If you would like to use macro-based responses (as seen below)
# windmark = { version = "0.3.9", features = ["response-macros"] }

Implement a Windmark server

// src/main.rs

#[windmark::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
  windmark::router::Router::new()
    .set_private_key_file("windmark_private.pem")
    .set_certificate_file("windmark_public.pem")
    .mount("/", windmark::success!("Hello, World!"))
    .set_error_handler(|_|
      windmark::response::Response::permanent_failure("This route does not exist!")
    )
    .run()
    .await
}

Examples

Examples can be found within the examples/ directory along with a rundown of each of their purposes and useful facts.

An example of a fully featured Gemini capsule written using Windmark can be found here. This example Gemini capsule also happens to be the source code for Fuwn’s (this library’s author) personal Gemini capsule!

Modules

Modules are reusable extensions which can be procedurally mounted onto Windmark routers.

Add yours!

Capsules using Windmark

Add yours!

License

This project is licensed with the GNU General Public License v3.0.

Modules

Attribute Macros

  • Marks async function to be executed by the selected runtime. This macro helps set up a Runtime without requiring the user to use Runtime or Builder directly.