#spring-boot #async-trait #path #bean #axum #traits #controller

vine

Vine is rust framework inspired by Spring Boot

13 releases

0.1.4 Oct 28, 2024
0.1.4-dev.11 Feb 12, 2025
0.1.4-dev.10 Sep 10, 2024
0.1.4-dev.6 Aug 12, 2024

#6 in #bean

Download history 118/week @ 2024-10-24 21/week @ 2024-10-31 3/week @ 2024-12-05 3/week @ 2024-12-12 55/week @ 2025-02-06

58 downloads per month

Apache-2.0

4KB

Vine

Vine is rust framework inspired by Spring Boot

Example:

use std::sync::Arc;
use async_trait::async_trait;
use axum::extract::Path;
use axum::response::IntoResponse;
use vine::{Bean, controller, get, injectable};
use vine::vine_core::core::Error;

#[async_trait]
trait Service {
    async fn compute(&self, name: String) -> String;
}

#[derive(Bean)]
struct Controller {
    service: Arc<dyn Service + Sync + Send>,
}

#[controller]
impl Controller {
    #[get("/hello/:name")]
    async fn say_hello(&self, Path(name): Path<String>) -> impl IntoResponse {
        self.service.compute(name).await
    }
}

#[derive(Bean)]
struct ServiceImpl {
    #[value("${service.name:DefaultName}")] name: String,
}

#[async_trait]
#[injectable]
impl Service for ServiceImpl {
    async fn compute(&self, name: String) -> String {
        format!("Hello from the {}: {}", &self.name, name)
    }
}

#[tokio::main]
async fn main() -> Result<(), Error> {
    vine::create_app()?
        .exec().await
}

Dependencies

~13–24MB
~325K SLoC