package utils import ( "fmt" "log/slog" "net/http" "strings" "time" ) func TriggerToast(w http.ResponseWriter, r *http.Request, class string, message string) { if IsHtmx(r) { w.Header().Set("Hx-Trigger", fmt.Sprintf(`{"toast": "%v|%v"}`, class, strings.ReplaceAll(message, `"`, `\"`))) } else { slog.Error("Trying to trigger toast in non-HTMX request") } } func TriggerToastWithStatus(w http.ResponseWriter, r *http.Request, class string, message string, statusCode int) { TriggerToast(w, r, class, message) w.WriteHeader(statusCode) } func DoRedirect(w http.ResponseWriter, r *http.Request, url string) { if IsHtmx(r) { w.Header().Add("Hx-Redirect", url) } else { http.Redirect(w, r, url, http.StatusSeeOther) } } func WaitMinimumTime[T any](waitTime time.Duration, f func() (T, error)) (T, error) { start := time.Now() result, err := f() time.Sleep(waitTime - time.Since(start)) return result, err } func IsHtmx(r *http.Request) bool { return r.Header.Get("Hx-Request") == "true" }