Skip to content

๐Ÿ—๏ธ Elegant & Highly Performant Async Gemini Server Framework for the Modern Age

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

gemrest/windmark

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

216 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

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

A macro-based "struct-router" is in active development as a simplified alternative to the standard server creation approach. Check out Rossweisse for more information!

Features

Feature Description
default Base Windmark framework using Tokio
logger Enables the default pretty_env_logger integration
auto-deduce-mime Exposes Responses and macros that automatically fill MIMEs for non-Gemini responses
response-macros Simple macros for all Responses
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

Add Windmark and Tokio as Dependencies

# Cargo.toml

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

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

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

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

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 windmark::response::Response;

#[rossweisse::router]
struct Router;

#[rossweisse::router]
impl Router {
  #[rossweisse::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.

Run an example by cloning this repository and running cargo run --example example_name.

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.

About

๐Ÿ—๏ธ Elegant & Highly Performant Async Gemini Server Framework for the Modern Age

Topics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Sponsor this project