github.com/eliastor/durgaform@v0.0.0-20220816172711-d0ab2d17673e/internal/backend/local/hook_state.go (about) 1 package local 2 3 import ( 4 "sync" 5 6 "github.com/eliastor/durgaform/internal/states" 7 "github.com/eliastor/durgaform/internal/states/statemgr" 8 "github.com/eliastor/durgaform/internal/durgaform" 9 ) 10 11 // StateHook is a hook that continuously updates the state by calling 12 // WriteState on a statemgr.Full. 13 type StateHook struct { 14 durgaform.NilHook 15 sync.Mutex 16 17 StateMgr statemgr.Writer 18 } 19 20 var _ durgaform.Hook = (*StateHook)(nil) 21 22 func (h *StateHook) PostStateUpdate(new *states.State) (durgaform.HookAction, error) { 23 h.Lock() 24 defer h.Unlock() 25 26 if h.StateMgr != nil { 27 if err := h.StateMgr.WriteState(new); err != nil { 28 return durgaform.HookActionHalt, err 29 } 30 } 31 32 return durgaform.HookActionContinue, nil 33 }