use async_trait::async_trait;
use super::rank_definitions::RankDefinition;
use super::types::{FactionId, Member, MemberId, Order, RankId};
use crate::context::ResourceContext;
#[async_trait]
pub trait ChainOfCommandHook: Send + Sync {
async fn can_promote_custom(
&self,
_member: &Member,
_new_rank: &RankDefinition,
_resources: &mut ResourceContext,
) -> bool {
true
}
async fn on_member_promoted(
&self,
_faction_id: &FactionId,
_member_id: &MemberId,
_new_rank: &RankId,
_resources: &mut ResourceContext,
) {
}
async fn execute_order(
&self,
_faction_id: &FactionId,
_member_id: &MemberId,
_order: &Order,
_resources: &mut ResourceContext,
) {
}
async fn on_order_refused(
&self,
_faction_id: &FactionId,
_member_id: &MemberId,
_order: &Order,
_resources: &mut ResourceContext,
) {
}
}
#[derive(Debug, Clone, Copy, Default)]
pub struct DefaultChainOfCommandHook;
#[async_trait]
impl ChainOfCommandHook for DefaultChainOfCommandHook {}