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§
- A custom plugin.
- A static record type.
Enums§
- A server tag is used to distinguish different servers.
Traits§
- Application interfaces.