use mago_syntax::ast::FunctionCall;
use mago_syntax::ast::MethodCall;
use mago_syntax::ast::NullSafeMethodCall;
use mago_syntax::ast::StaticMethodCall;
use crate::plugin::context::HookContext;
use crate::plugin::hook::ExpressionHookResult;
use crate::plugin::hook::HookResult;
use crate::plugin::provider::Provider;
pub trait FunctionCallHook: Provider {
fn before_function_call(
&self,
_call: &FunctionCall<'_>,
_context: &mut HookContext<'_, '_>,
) -> HookResult<ExpressionHookResult> {
Ok(ExpressionHookResult::Continue)
}
fn after_function_call(&self, _call: &FunctionCall<'_>, _context: &mut HookContext<'_, '_>) -> HookResult<()> {
Ok(())
}
}
pub trait MethodCallHook: Provider {
fn before_method_call(
&self,
_call: &MethodCall<'_>,
_context: &mut HookContext<'_, '_>,
) -> HookResult<ExpressionHookResult> {
Ok(ExpressionHookResult::Continue)
}
fn after_method_call(&self, _call: &MethodCall<'_>, _context: &mut HookContext<'_, '_>) -> HookResult<()> {
Ok(())
}
}
pub trait StaticMethodCallHook: Provider {
fn before_static_method_call(
&self,
_call: &StaticMethodCall<'_>,
_context: &mut HookContext<'_, '_>,
) -> HookResult<ExpressionHookResult> {
Ok(ExpressionHookResult::Continue)
}
fn after_static_method_call(
&self,
_call: &StaticMethodCall<'_>,
_context: &mut HookContext<'_, '_>,
) -> HookResult<()> {
Ok(())
}
}
pub trait NullSafeMethodCallHook: Provider {
fn before_nullsafe_method_call(
&self,
_call: &NullSafeMethodCall<'_>,
_context: &mut HookContext<'_, '_>,
) -> HookResult<ExpressionHookResult> {
Ok(ExpressionHookResult::Continue)
}
fn after_nullsafe_method_call(
&self,
_call: &NullSafeMethodCall<'_>,
_context: &mut HookContext<'_, '_>,
) -> HookResult<()> {
Ok(())
}
}