package orm

import (
	
	
)

type hookStubs struct{}

var (
	_ AfterScanHook    = (*hookStubs)(nil)
	_ AfterSelectHook  = (*hookStubs)(nil)
	_ BeforeInsertHook = (*hookStubs)(nil)
	_ AfterInsertHook  = (*hookStubs)(nil)
	_ BeforeUpdateHook = (*hookStubs)(nil)
	_ AfterUpdateHook  = (*hookStubs)(nil)
	_ BeforeDeleteHook = (*hookStubs)(nil)
	_ AfterDeleteHook  = (*hookStubs)(nil)
)

func (hookStubs) ( context.Context) error {
	return nil
}

func (hookStubs) ( context.Context) error {
	return nil
}

func (hookStubs) ( context.Context) (context.Context, error) {
	return , nil
}

func (hookStubs) ( context.Context) error {
	return nil
}

func (hookStubs) ( context.Context) (context.Context, error) {
	return , nil
}

func (hookStubs) ( context.Context) error {
	return nil
}

func (hookStubs) ( context.Context) (context.Context, error) {
	return , nil
}

func (hookStubs) ( context.Context) error {
	return nil
}

func (
	 context.Context,
	 reflect.Value,
	 bool,
	 func(context.Context, reflect.Value) (context.Context, error),
) (context.Context, error) {
	var  error
	 := .Len()
	for  := 0;  < ; ++ {
		 := .Index()
		if ! {
			 = .Addr()
		}

		var  error
		,  = (, )
		if  != nil &&  == nil {
			 = 
		}
	}
	return , 
}

func (
	 context.Context,
	 reflect.Value,
	 bool,
	 func(context.Context, reflect.Value) error,
) error {
	var  error
	if .IsValid() {
		 := .Len()
		for  := 0;  < ; ++ {
			 := .Index()
			if ! {
				 = .Addr()
			}

			 := (, )
			if  != nil &&  == nil {
				 = 
			}
		}
	}
	return 
}

//------------------------------------------------------------------------------

type BeforeScanHook interface {
	BeforeScan(context.Context) error
}

var beforeScanHookType = reflect.TypeOf((*BeforeScanHook)(nil)).Elem()

func ( context.Context,  reflect.Value) error {
	return .Interface().(BeforeScanHook).BeforeScan()
}

//------------------------------------------------------------------------------

type AfterScanHook interface {
	AfterScan(context.Context) error
}

var afterScanHookType = reflect.TypeOf((*AfterScanHook)(nil)).Elem()

func ( context.Context,  reflect.Value) error {
	return .Interface().(AfterScanHook).AfterScan()
}

//------------------------------------------------------------------------------

type AfterSelectHook interface {
	AfterSelect(context.Context) error
}

var afterSelectHookType = reflect.TypeOf((*AfterSelectHook)(nil)).Elem()

func ( context.Context,  reflect.Value) error {
	return .Interface().(AfterSelectHook).AfterSelect()
}

func (
	 context.Context,  reflect.Value,  bool,
) error {
	return callHookSlice2(, , , callAfterSelectHook)
}

//------------------------------------------------------------------------------

type BeforeInsertHook interface {
	BeforeInsert(context.Context) (context.Context, error)
}

var beforeInsertHookType = reflect.TypeOf((*BeforeInsertHook)(nil)).Elem()

func ( context.Context,  reflect.Value) (context.Context, error) {
	return .Interface().(BeforeInsertHook).BeforeInsert()
}

func (
	 context.Context,  reflect.Value,  bool,
) (context.Context, error) {
	return callHookSlice(, , , callBeforeInsertHook)
}

//------------------------------------------------------------------------------

type AfterInsertHook interface {
	AfterInsert(context.Context) error
}

var afterInsertHookType = reflect.TypeOf((*AfterInsertHook)(nil)).Elem()

func ( context.Context,  reflect.Value) error {
	return .Interface().(AfterInsertHook).AfterInsert()
}

func (
	 context.Context,  reflect.Value,  bool,
) error {
	return callHookSlice2(, , , callAfterInsertHook)
}

//------------------------------------------------------------------------------

type BeforeUpdateHook interface {
	BeforeUpdate(context.Context) (context.Context, error)
}

var beforeUpdateHookType = reflect.TypeOf((*BeforeUpdateHook)(nil)).Elem()

func ( context.Context,  reflect.Value) (context.Context, error) {
	return .Interface().(BeforeUpdateHook).BeforeUpdate()
}

func (
	 context.Context,  reflect.Value,  bool,
) (context.Context, error) {
	return callHookSlice(, , , callBeforeUpdateHook)
}

//------------------------------------------------------------------------------

type AfterUpdateHook interface {
	AfterUpdate(context.Context) error
}

var afterUpdateHookType = reflect.TypeOf((*AfterUpdateHook)(nil)).Elem()

func ( context.Context,  reflect.Value) error {
	return .Interface().(AfterUpdateHook).AfterUpdate()
}

func (
	 context.Context,  reflect.Value,  bool,
) error {
	return callHookSlice2(, , , callAfterUpdateHook)
}

//------------------------------------------------------------------------------

type BeforeDeleteHook interface {
	BeforeDelete(context.Context) (context.Context, error)
}

var beforeDeleteHookType = reflect.TypeOf((*BeforeDeleteHook)(nil)).Elem()

func ( context.Context,  reflect.Value) (context.Context, error) {
	return .Interface().(BeforeDeleteHook).BeforeDelete()
}

func (
	 context.Context,  reflect.Value,  bool,
) (context.Context, error) {
	return callHookSlice(, , , callBeforeDeleteHook)
}

//------------------------------------------------------------------------------

type AfterDeleteHook interface {
	AfterDelete(context.Context) error
}

var afterDeleteHookType = reflect.TypeOf((*AfterDeleteHook)(nil)).Elem()

func ( context.Context,  reflect.Value) error {
	return .Interface().(AfterDeleteHook).AfterDelete()
}

func (
	 context.Context,  reflect.Value,  bool,
) error {
	return callHookSlice2(, , , callAfterDeleteHook)
}