Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
/vialPublic

🧪 a micro micro-framework for rust

License

Apache-2.0, MIT licenses found

Licenses found

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

xvxx/vial

Repository files navigation

Drink Me.

~ vial: a micro micro-framework ~

Vial is a small web "framework" for making small web sites inRust.

It includes just a few basics:

  • Parsing and routing HTTP requests
  • Parsing POST form data
  • Serving static files (css, js)

Everything else... well, that's up to you.

The goal is an as-few-as-possible-dependencies web library you canuse to test out an idea quickly or get a personal projectrolling.Single file, server side apps? You bet! Fast compilation? Yes please!À la carte dependencies? Now you're talkin'!

It's sort of like a picnic where the playlist is all 90s music and youhave to bring your own beverages. And food.

To learn more, keep reading or visit one of these links:


⚠ Status: Vial is still in development and shouldn't be used tobuild real world apps on untrusted networks. Please proceed with cautionand wear a hard hat at all times.


~ getting started ~

To get started, just addvial to yourCargo.toml:

[dependencies]vial ="0.1"

Now you canuse vial::prelude::*; in your application to pull in thecommon types, or just use the crate like any other.

~ hello world ~

As is tradition:

vial::routes!{GET"/" => |_|"Hello, world!";}fnmain(){    vial::run!().unwrap();}

For a bit more sanity, you can route to functions directly:

use vial::prelude::*;routes!{GET"/echo" => echo;POST"/echo" => post;}fnecho(_:Request) ->&'staticstr{"<form method='POST'>        <input type='text' name='echo'/>        <input type='submit'/>    </form>"}fnpost(req:Request) ->String{format!("<h1>You said: {}</h1>",        req.form("echo").unwrap_or("You didn't say anything!"))}fnmain(){    vial::run!().unwrap();}

Toreally break the mold, you can split your site into differentmodules:

use vial;mod wiki;mod blog;mod index{use vial::prelude::*;routes!{GET"/" => |_|Response::from_file("index.html")}}fnmain(){// The order matters here - if `wiki` and `blog` both define "/",// the `mod index` version will match first and get run.    vial::run!(index, wiki, blog);}

But hey, who wants to putz around with HTML when you can be writingRust? Enable thehorror feature and you're on your way:

use vial::prelude::*;#[macro_use]externcrate horrorshow;routes!{GET"/" => |_| html!{        p{:"You're looking for this: ";            a(href="/echo"){:"echo"}}};GET"/echo" => echo;POST"/echo" => post;}fnecho(_:Request) ->implResponder{html!{        form(method="POST"){            p{:"Type something: ";                input(type="text", name="echo");                input(type="submit");}}}}fnpost(req:Request) ->implResponder{owned_html!{        h1: req.form("echo").unwrap_or("You didn't say anything!");}}fnmain(){    vial::run!().unwrap();}

~ bonus features ~

vial doesn't come with JSON or a template engine or any of thatfancy stuff by default, but there (will be) a few compile-time--features you can activate for enhanced productivity:

Alice

  • hatter: EnableHatter: A positively mad, HTML templatinglanguage.
  • horror: Enablehorrorshow: A small & fast macro-based HTMLbuilder.
  • json_serde:Request::json andResponse::with_json powers, viaSerde.
  • json_nano:Request::json andResponse::with_json, viananoserde.
  • cookies:Request::cookie(),Response::with_cookie, andfriends.
  • sessions:Request::session(),Response::with_session, andfriends.
  • uploads: Multipart form data (file uploads)
  • log: Access logging

Please note: The list above is a work-in-progress.

~ hot reloading ~

Your assets will automatically get reloaded in debug mode, completewith proper ETag support, but you probably want to refresh your Rustcode, too.

Right now the easiest way is to usecargo-watch:

$ cargo install cargo-watch$ cargo watch -x 'run --example hello_world'

~ testing ~

Tests can be run on a recent version of stableRust withmake test. We also run tests on commits withGitHubActions.

Vial prefers to put everything intests/ rather than includetests directly insrc/*.rs files. To access private APIs in tests,we make thempub and use#[doc(hidden)]. Your cooperation isappreciated.

~ license ~

Vial is licensed under either of the following, at your option:

About

🧪 a micro micro-framework for rust

Topics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp