Module zino_core::application

source ·
Expand description

High level abstractions for the application.

§Examples

use casbin::prelude::*;
use std::sync::OnceLock;
use zino_core::application::{Application, Plugin};

#[derive(Debug, Clone, Copy)]
pub struct Casbin;

impl Casbin {
    pub fn init() -> Plugin {
        let loader = Box::pin(async {
            let model_file = "./config/casbin/model.conf";
            let policy_file = "./config/casbin/policy.csv";
            let enforcer = Enforcer::new(model_file, policy_file).await?;
            if CASBIN_ENFORCER.set(enforcer).is_err() {
                tracing::error!("fail to initialize the Casbin enforcer");
            }
            Ok(())
        });
        let mut plugin = Plugin::new("casbin");
        plugin.set_loader(loader);
        plugin
    }
}

static CASBIN_ENFORCER: OnceLock<Enforcer> = OnceLock::new();

fn main() {
    zino::Cluster::boot()
        .add_plugin(Casbin::init())
        .run()
}

Structs§

Enums§

  • A server tag is used to distinguish different servers.

Traits§