Skip to main content

Crate windmark

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

[!NOTE] Rossweisse lets you define a Windmark router using a struct and route attributes. See the Rossweisse guide for an example.

§Features

FeatureDescription
defaultBase Windmark framework using Tokio
auto-deduce-mimeEnables Response::binary_success_auto to infer the MIME type of binary content
tokioMarks Tokio as the asynchronous runtime
async-stdMarks async-std as the asynchronous runtime

§Add Windmark and Tokio as Dependencies

# Cargo.toml

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

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

§Implementing a Windmark Server

// src/main.rs

use windmark::response::Response;

#[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("/", |_| Response::success("Hello, World!"))
    .set_error_handler(|_|
      Response::permanent_failure("This route does not exist!")
    )
    .run()
    .await
}

§Implementing a Windmark Server Using Rossweisse

// src/main.rs

use rossweisse::route;
use windmark::response::Response;

#[rossweisse::router]
struct Router;

#[rossweisse::router]
impl Router {
  #[route(index)]
  pub fn index(
    _context: windmark::context::RouteContext,
  ) -> Response {
    Response::success("Hello, World!")
  }
}

// ...

§Examples

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

Each entry in the examples guide lists the required features. Generate local credentials with just gen-key, then use the listed command or just example example_name (optionally followed by async-std).

§Modules

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

§Examples

§License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Modules§

context
handler
module
prelude
response
This module provides the response type returned by handlers.
router
router_option
utilities
This module provides URL query helpers.

Attribute Macros§

main
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.