33 lines
		
	
	
	
		
			932 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			932 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package handler
 | |
| 
 | |
| import "github.com/gin-gonic/gin"
 | |
| 
 | |
| // This is essentially the same as [gin.HandlerFunc], but allows returning
 | |
| // an error. This allows for the more idiomatic use:
 | |
| //
 | |
| //	func UserHandler (c *gin.Context) error {
 | |
| //	    user, err := db.GetUser(c.Get("user"))
 | |
| //	    if err != nil {
 | |
| //	        return err
 | |
| //	    }
 | |
| //	    c.JSON(200, user)
 | |
| //	}
 | |
| type HandlerWithError func(c *gin.Context) error
 | |
| 
 | |
| // Allows you to actually use a [HandlerWithError] as a [gin.HandlerFunc].
 | |
| // If an error is returned, it adds it to the context with c.Error(err).
 | |
| // This needs to be handled with a middleware, such as [ErrorMiddleware]
 | |
| //
 | |
| // Usage:
 | |
| //
 | |
| //	c.GET("/user", HandlerWithErrorWrapper(UserHandler))
 | |
| func HandlerWithErrorWrapper(h HandlerWithError) gin.HandlerFunc {
 | |
| 	return func(c *gin.Context) {
 | |
| 		err := h(c)
 | |
| 		if err != nil {
 | |
| 			// We shouldn't process more handlers if there was an error
 | |
| 			c.Abort()
 | |
| 			c.Error(err)
 | |
| 		}
 | |
| 	}
 | |
| }
 |