7 releases

0.0.10 Nov 6, 2023
0.0.9 Jul 20, 2023
0.0.8 Jun 24, 2023

#279 in Asynchronous

35 downloads per month

MIT license

34KB
881 lines


Rust framework 🐦 'Experimental

Table of contents

Services

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();
}
  • Async init
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();
}
  • Async init functional
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(),
    }
}

Globals

Create global

use wildbird::derive::*;

#[var]
pub fn my_name() -> String {
    String::from("Hawk 🦅")
}

fn main() {
    println!("Hello from 🇵🇱, {}", &*MY_NAME);
}
  • Custom 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);
}
  • Async init
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("⏱️")
}
  • callback init
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());
}

Get started

Add dependency

Cargo.toml

[dependencies]
wildbird = "^0.0.10"
Feature flags

Optional features

  • tokio - Use to support tokio async environment
[dependencies]
tokio = "1.28.2"
wildbird = {version = "^0.0.10", features = ["tokio"]}

Project status

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.

Created By


License

MIT


BACK TO TOP ⬆️

Dependencies

~4–15MB
~156K SLoC