Rupring v0.2.0

https://crates.io/crates/rupring
https://github.com/myyrakle/rupring/releases/tag/v0.2.0
๋งŒ๋“ค์—ˆ๋‹ค.
๋‚ด ์ทจํ–ฅ๋Œ€๋กœ ๊พธ๋ฉฐ๋ณธ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค.

tokio/hyper ์Šคํƒ์œผ๋กœ ์ง์ ‘ ์Œ“์•˜๊ณ , Nest.js ์Šคํƒ€์ผ์˜ ๊ตฌ์„ฑ์„ ์ตœ๋Œ€ํ•œ ๋”ฐ๋ฅด๊ณ ์ž ํ–ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๋‹ค.
๋””ํŽœ๋˜์‹œ ์ถ”๊ฐ€ํ•˜๊ณ 

์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ๋ชจ๋“ˆ/์ปจํŠธ๋กค๋Ÿฌ/route ๊ตฌ์กฐ๋ฅผ ์งœ๊ณ 

#[derive(Debug, Clone, Copy)]
#[rupring::Module(controllers=[HomeController{}], modules=[])]
pub struct RootModule {}

#[derive(Debug, Clone)]
#[rupring::Controller(prefix=/, routes=[hello, echo])]
pub struct HomeController {}

#[rupring::Get(path = /)]
pub fn hello(_request: rupring::Request) -> rupring::Response {
    rupring::Response {
        status: 200,
        body: "Hello, World!".to_string(),
        headers: Default::default(),
    }
}

#[rupring::Get(path = /echo)]
pub fn echo(request: rupring::Request) -> rupring::Response {
    rupring::Response {
        status: 200,
        body: request.body,
        headers: Default::default(),
    }
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
    use std::net::SocketAddr;

    let addr = SocketAddr::from(([127, 0, 0, 1], 3000));

    let module = RootModule {};
    rupring::boot::run_server(addr, module).await?;

    Ok(())
}

์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿผ ์ž˜ ๋œฐ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฐ๋Œ€๋กœ ๋™์ž‘์€ ํ•˜์ง€๋งŒ ์•„์ง ๋ถ€์กฑํ•œ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ๋‹ค.

์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™”๋„ ์—†๊ณ , ์•„์ง DI๋„ ์—†๋‹ค. ๋ฏธ๋“ค์›จ์–ด๋„ ์—†๊ณ , ์ž๋™ ๋ฌธ์„œํ™”๋„ ์—†๋‹ค.
ํ‹€์€ ๋Œ€์ถฉ ์งฐ์œผ๋‹ˆ ์ด์ œ ์ฒœ์ฒœํžˆ ์ถ”๊ฐ€ํ•ด๋ณด๋ ค ํ•œ๋‹ค.