#[non_exhaustive]pub enum Hook<T: TableSource> {
BeforeSelect(SelectFn<T>),
BeforeInsert(Phase, BeforeFn<T>),
BeforeUpdate(Phase, BeforeFn<T>),
BeforeSave(Phase, BeforeFn<T>),
BeforeDelete(BeforeDeleteFn<T>),
AfterInsert(AfterFn<T>),
AfterUpdate(AfterFn<T>),
AfterSave(AfterFn<T>),
AfterDelete(AfterFn<T>),
BeforeDeleteAll(DeleteAllFn<T>),
AfterDeleteAll(DeleteAllFn<T>),
}Expand description
A lifecycle hook attached to a table via Table::with_hook. Each variant
carries a closure receiving exactly the references available at that stage.
BeforeSave/AfterSave are sugar that register for both insert and update.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
BeforeSelect(SelectFn<T>)
Before every read that returns rows or facts about rows: list, get,
get-some, streams (before the first item), count and the aggregates
(sum/max/min). An Err refuses the read. Vista shells that read the
source directly call Table::check_read first.
It does not run when the table is embedded in another query —
related_in_condition, column_table_values_expr, get_*_query and
get_expr_* build expressions or subqueries, not reads of this table.
Rules that must hold inside a subquery belong in the table’s
conditions, added when it is built.
Reads a write makes run it too, so a refusing BeforeSelect also
refuses: an update when before- or after-update hooks exist (the
stored row is read first), a delete when delete hooks exist (the row is read for
them), and a write whose backend reads the row back. A Dio serves
reads from its cache, filled by its own loader, so reads through a
Dio don’t run the master table’s BeforeSelect.
BeforeInsert(Phase, BeforeFn<T>)
BeforeUpdate(Phase, BeforeFn<T>)
BeforeSave(Phase, BeforeFn<T>)
BeforeDelete(BeforeDeleteFn<T>)
AfterInsert(AfterFn<T>)
AfterUpdate(AfterFn<T>)
AfterSave(AfterFn<T>)
AfterDelete(AfterFn<T>)
BeforeDeleteAll(DeleteAllFn<T>)
Before delete_all, once for the whole set; per-row delete hooks don’t run.
AfterDeleteAll(DeleteAllFn<T>)
Auto Trait Implementations§
impl<T> !RefUnwindSafe for Hook<T>
impl<T> !UnwindSafe for Hook<T>
impl<T> Freeze for Hook<T>where
Arc<dyn for<'r> Fn(SelectCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Freeze,
Arc<dyn for<'r> Fn(BeforeCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Freeze,
Arc<dyn for<'r> Fn(DeleteCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<HookReturn, VantageError>> + Send + 'r>> + Sync + Send>: Freeze,
Arc<dyn for<'r> Fn(AfterCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Freeze,
Arc<dyn for<'r> Fn(DeleteAllCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Freeze,
impl<T> Send for Hook<T>where
Arc<dyn for<'r> Fn(SelectCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Send,
Arc<dyn for<'r> Fn(BeforeCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Send,
Arc<dyn for<'r> Fn(DeleteCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<HookReturn, VantageError>> + Send + 'r>> + Sync + Send>: Send,
Arc<dyn for<'r> Fn(AfterCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Send,
Arc<dyn for<'r> Fn(DeleteAllCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Send,
impl<T> Sync for Hook<T>where
Arc<dyn for<'r> Fn(SelectCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Sync,
Arc<dyn for<'r> Fn(BeforeCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Sync,
Arc<dyn for<'r> Fn(DeleteCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<HookReturn, VantageError>> + Send + 'r>> + Sync + Send>: Sync,
Arc<dyn for<'r> Fn(AfterCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Sync,
Arc<dyn for<'r> Fn(DeleteAllCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Sync,
impl<T> Unpin for Hook<T>where
Arc<dyn for<'r> Fn(SelectCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Unpin,
Arc<dyn for<'r> Fn(BeforeCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Unpin,
Arc<dyn for<'r> Fn(DeleteCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<HookReturn, VantageError>> + Send + 'r>> + Sync + Send>: Unpin,
Arc<dyn for<'r> Fn(AfterCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Unpin,
Arc<dyn for<'r> Fn(DeleteAllCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: Unpin,
impl<T> UnsafeUnpin for Hook<T>where
Arc<dyn for<'r> Fn(SelectCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: UnsafeUnpin,
Arc<dyn for<'r> Fn(BeforeCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: UnsafeUnpin,
Arc<dyn for<'r> Fn(DeleteCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<HookReturn, VantageError>> + Send + 'r>> + Sync + Send>: UnsafeUnpin,
Arc<dyn for<'r> Fn(AfterCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: UnsafeUnpin,
Arc<dyn for<'r> Fn(DeleteAllCx<'r, T>) -> Pin<Box<dyn Future<Output = Result<(), VantageError>> + Send + 'r>> + Sync + Send>: UnsafeUnpin,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more