Crates.io | windmark |
lib.rs | windmark |
version | 0.3.11 |
source | src |
created_at | 2022-03-25 07:21:47.212349 |
updated_at | 2024-07-17 01:38:53.510184 |
description | An elegant and highly performant async Gemini server framework |
homepage | https://github.com/gemrest/windmark |
repository | https://github.com/gemrest/windmark |
max_upload_size | |
id | 556108 |
size | 172,371 |
Windmark is an elegant and highly performant, async Gemini server framework for the modern age!
Now supporting both Tokio and async-std
!
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!
Feature | Description |
---|---|
default |
Base Windmark framework using Tokio |
logger |
Enables the default pretty_env_logger integration |
auto-deduce-mime |
Exposes Response s and macros that automatically fill MIMEs for non-Gemini responses |
response-macros |
Simple macros for all Response s |
tokio |
Marks Tokio as the asynchronous runtime |
async-std |
Marks async-std as the asynchronous runtime |
prelude |
Exposes the prelude module containing the most used Windmark features |
# 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"] }
// 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
}
// src/main.rs
// ...
#[rossweisse::router]
struct Router;
#[rossweisse::router]
impl Router {
#[route(index)]
pub fn index(
_context: windmark::context::RouteContext,
) -> Response {
Response::success("Hello, World!")
}
}
// ...
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 are reusable extensions which can be procedurally mounted onto Windmark routers.
This project is licensed with the GNU General Public License v3.0.