🔥kurosabi🔥

Rustの安全性と並列性を活かした、超軽量・高速・シンプルなWebバックエンドルーター

パフォーマンスと軽量さ、書きやすさ を大事にします

📋 ToDo

初期実装

✅ http_serverの実装
✅ ルーターの実装
✅ 基本的な構文の実装

機能追加 1

✅ keep_alive の実装
✅ サーバー設定の追加
✅ レスポンス関連の機能追加

最適化 1

✅ keep_aliveを修正
✅ htmlのフォーマットマクロを追加
✅ TCPストリームを直接操作できるように改良

破壊的変更 1

✅ 構文をより扱いやすくするため Contextにすべて集約
✅ http_serverをよりスループットの高いように改良

最適化 2

⏳ linuxでTCP操作でport関連の改良
⏳ エラーハンドリングをもっと楽に
⏳ ミドルウェアへの対応
⏳ セキュリティの強化

✨ 特徴

⚡ 超軽量・高速

Rustの性能を最大限活用

🎯 シンプルルーティング

表現力の高いルーティング

🔄 非同期対応

非同期ハンドラ完全対応

🛣️ パスパラメータ

ワイルドカード対応

📦 多様なレスポンス

JSON・ファイルレスポンス

🔧 カスタマイズ

柔軟なサーバー設定

📦 インストール

Cargo.tomlに以下を追加してください:

[dependencies]
kurosabi = "0.3" # 最新版

🚀 試す

以下のコマンドでexamplesのデモを見れます:

cargo run --example start
🎮 今すぐ試す

📚 はじめかた

1. インポート

use kurosabi::{Kurosabi, kurosabi::Context};

2. サーバー作成とルート追加と実行

fn main() {
    // Kurosabiのインスタンスを作成
    let mut kurosabi = Kurosabi::new();

    // ルートハンドラの定義
    kurosabi.get("/", |mut c| async move {
        c.res.text("Hello, Kurosabi!");
        c
    });

    // パスパラメータの例
    kurosabi.get("/field/:field/:value", |mut c| async move {
        let field = c.req.path.get_field("field").unwrap_or("unknown".to_string());
        let value = c.req.path.get_field("value").unwrap_or("unknown".to_string());
        c.res.text(&format!("Field: {}, Value: {}", field, value));
        c
    });

    // サーバーを実行
    kurosabi.server().build().run();
}

💡 提案

提案があればぜひissueへ
プルリクもまってます

📝 Issue作成 🔧 Pull Request