Crates.io | wildbird |
lib.rs | wildbird |
version | 0.0.11 |
source | src |
created_at | 2023-06-12 10:17:38.675045 |
updated_at | 2024-07-24 14:45:16.716515 |
description | Rust Framework 🐦 |
homepage | |
repository | https://github.com/PawelJastrzebski/wildbird.rs |
max_upload_size | |
id | 888067 |
size | 41,693 |
Welcome to the Wildbird 🐦, designed to streamline your Rust development. Equipped with tools for creating and managing services 🧩 and globals with dependency injection 📌 functionality.
Create service instance (Singleton) in one step
use wildbird::prelude::*;
// Convert struct to Service + impl construct()
#[service(construct = "init")]
struct HelloService {
component_name: String,
}
impl HelloService {
fn init() -> HelloService {
HelloService {
component_name: "Hello penguins 🐧".to_string(),
}
}
fn say_hello(&self) {
println!("Hello! 👋")
}
}
fn main() {
HelloService.say_hello();
}
use wildbird::derive::*;
#[service(construct = "async init")]
struct AsyncService {}
impl AsyncService {
async fn init() -> AsyncService {
AsyncService {}
}
fn greeting(&self) {
println!("Hello 🗼")
}
}
fn main() {
AsyncService.greeting();
}
use wildbird::derive::*;
// Convert struct to Service
#[service]
struct HelloService {
component_name: String,
}
// Impl Service trait construct()
#[service(construct)]
async fn hello_init() -> HelloService {
HelloService {
component_name: "Hello 🚀".to_string(),
}
}
Create global
use wildbird::derive::*;
#[var]
pub fn my_name() -> String {
String::from("Hawk 🦅")
}
fn main() {
println!("Hello from 🇵🇱, {}", &*MY_NAME);
}
use wildbird::derive::*;
#[var(name = "HOME")]
fn custom_name() -> String {
std::env::var("HOME").expect("env:HOME not found")
}
fn main() {
println!("Home: {}", &*HOME);
}
use std::time::Duration;
use wildbird::derive::*;
use std::thread::sleep;
#[var(name = "USERS")]
async fn http_fetch_users() -> String {
sleep(Duration::from_millis(200));
String::from("⏱️")
}
use std::time::Duration;
use wildbird::derive::*;
use std::thread::sleep;
#[var(name = "PORT")]
async fn init_http_service(callback: wildbird::Callback<String>) {
sleep(Duration::from_millis(200));
println!("Server started");
callback.call("8080".to_string());
}
Injection support is currently limited to the #[service(construct)]
initialization method.
For example:
use wildbird::prelude::*;
#[service]
struct B {
name: String,
}
#[service(construct)]
async fn b_init() -> B {
B {
name: "Baby 🐤".to_string(),
}
}
#[service]
struct A {
name: String,
b_service: Arc<B>
}
#[service(construct)]
async fn a_init(b: Arc<B>) -> A {
A {
name: "Automobile 🚗".to_string(),
b_service: b
}
}
Cargo.toml
[dependencies]
wildbird = "^0.0.11"
Optional features
[dependencies]
tokio = "1.28"
wildbird = {version = "^0.0.11", features = ["tokio"]}
Project is in early state of development. Each release is prior tested but api changes will most likely to happen in the future as the project progress.
This project is licensed under the MIT License.