Fixes Content.Negotiate API
This commit is contained in:
		
							
								
								
									
										42
									
								
								context.go
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								context.go
									
									
									
									
									
								
							@ -82,6 +82,7 @@ func (engine *Engine) createContext(w http.ResponseWriter, req *http.Request, pa
 | 
			
		||||
	c.handlers = handlers
 | 
			
		||||
	c.Keys = nil
 | 
			
		||||
	c.index = -1
 | 
			
		||||
	c.accepted = nil
 | 
			
		||||
	c.Errors = c.Errors[0:0]
 | 
			
		||||
	return c
 | 
			
		||||
}
 | 
			
		||||
@ -280,47 +281,34 @@ func (c *Context) File(filepath string) {
 | 
			
		||||
/************************************/
 | 
			
		||||
/******** CONTENT NEGOTIATION *******/
 | 
			
		||||
/************************************/
 | 
			
		||||
 | 
			
		||||
type Negotiate struct {
 | 
			
		||||
	Offered  []string
 | 
			
		||||
	Data     interface{}
 | 
			
		||||
	JsonData interface{}
 | 
			
		||||
	XMLData  interface{}
 | 
			
		||||
	HTMLData interface{}
 | 
			
		||||
	HTMLPath string
 | 
			
		||||
	HTMLData interface{}
 | 
			
		||||
	JSONData interface{}
 | 
			
		||||
	XMLData  interface{}
 | 
			
		||||
	Data     interface{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Context) Negotiate2(code int, config Negotiate) {
 | 
			
		||||
func (c *Context) Negotiate(code int, config Negotiate) {
 | 
			
		||||
	result := c.NegotiateFormat(config.Offered...)
 | 
			
		||||
	switch result {
 | 
			
		||||
	case MIMEJSON:
 | 
			
		||||
		c.JSON(code, config.Data)
 | 
			
		||||
 | 
			
		||||
	case MIMEHTML:
 | 
			
		||||
		name := config.HTMLPath
 | 
			
		||||
		c.HTML(code, name, config.Data)
 | 
			
		||||
 | 
			
		||||
	case MIMEXML:
 | 
			
		||||
		c.XML(code, config.Data)
 | 
			
		||||
	default:
 | 
			
		||||
		c.Fail(400, errors.New("m"))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *Context) Negotiate(code int, config map[string]interface{}, offerts ...string) {
 | 
			
		||||
	result := c.NegotiateFormat(offerts...)
 | 
			
		||||
	switch result {
 | 
			
		||||
	case MIMEJSON:
 | 
			
		||||
		data := readData("json.data", config)
 | 
			
		||||
		data := chooseData(config.JSONData, config.Data)
 | 
			
		||||
		c.JSON(code, data)
 | 
			
		||||
 | 
			
		||||
	case MIMEHTML:
 | 
			
		||||
		data := readData("html.data", config)
 | 
			
		||||
		name := config["html.path"].(string)
 | 
			
		||||
		c.HTML(code, name, data)
 | 
			
		||||
		data := chooseData(config.HTMLData, config.Data)
 | 
			
		||||
		if len(config.HTMLPath) == 0 {
 | 
			
		||||
			panic("negotiate config is wrong. html path is needed")
 | 
			
		||||
		}
 | 
			
		||||
		c.HTML(code, config.HTMLPath, data)
 | 
			
		||||
 | 
			
		||||
	case MIMEXML:
 | 
			
		||||
		data := readData("xml.data", config)
 | 
			
		||||
		data := chooseData(config.XMLData, config.Data)
 | 
			
		||||
		c.XML(code, data)
 | 
			
		||||
 | 
			
		||||
	default:
 | 
			
		||||
		c.Fail(400, errors.New("m"))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										14
									
								
								utils.go
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								utils.go
									
									
									
									
									
								
							@ -46,16 +46,14 @@ func filterFlags(content string) string {
 | 
			
		||||
	return content
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func readData(key string, config map[string]interface{}) interface{} {
 | 
			
		||||
	data, ok := config[key]
 | 
			
		||||
	if ok {
 | 
			
		||||
		return data
 | 
			
		||||
	}
 | 
			
		||||
	data, ok = config["*.data"]
 | 
			
		||||
	if !ok {
 | 
			
		||||
func chooseData(custom, wildcard interface{}) interface{} {
 | 
			
		||||
	if custom == nil {
 | 
			
		||||
		if wildcard == nil {
 | 
			
		||||
			panic("negotiation config is invalid")
 | 
			
		||||
		}
 | 
			
		||||
	return data
 | 
			
		||||
		return wildcard
 | 
			
		||||
	}
 | 
			
		||||
	return custom
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseAccept(accept string) []string {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user