Skip to content
Snippets Groups Projects
Verified Commit 59f7404d authored by Volker Schukai's avatar Volker Schukai :alien:
Browse files

new ContentType function

parent 1465cf37
No related branches found
No related tags found
No related merge requests found
...@@ -46,6 +46,28 @@ func handleRequest(w http.ResponseWriter, r *http.Request) { ...@@ -46,6 +46,28 @@ func handleRequest(w http.ResponseWriter, r *http.Request) {
``` ```
### Accept Content Type
With the `ContentType` function you can negotiate the content type of HTTP request.
```go
package main
import (
"net/http"
"gitlab.schukai.com/oss/libraries/go/network/http-negotiation"
)
func handleRequest(w http.ResponseWriter, r *http.Request) {
n := negotiation.New(r.Header)
if n.ContentType("application/json") != "" {
// ...
}
}
```
### Language Negotiation ### Language Negotiation
With the `Language` function you can negotiate the language of HTTP request. With the `Language` function you can negotiate the language of HTTP request.
...@@ -66,7 +88,6 @@ func handleRequest(w http.ResponseWriter, r *http.Request) { ...@@ -66,7 +88,6 @@ func handleRequest(w http.ResponseWriter, r *http.Request) {
} }
} }
``` ```
### Charset Negotiation ### Charset Negotiation
...@@ -115,6 +136,16 @@ func handleRequest(w http.ResponseWriter, r *http.Request) { ...@@ -115,6 +136,16 @@ func handleRequest(w http.ResponseWriter, r *http.Request) {
``` ```
## Changelog
### 1.1.0
* Add `ContentType` function
### 1.0.0
* Initial release
## Contributing ## Contributing
Merge requests are welcome. For major changes, please open an issue first to discuss what Merge requests are welcome. For major changes, please open an issue first to discuss what
......
...@@ -14,6 +14,11 @@ func New(header http.Header) *Negotiation { ...@@ -14,6 +14,11 @@ func New(header http.Header) *Negotiation {
return &Negotiation{header} return &Negotiation{header}
} }
func (n *Negotiation) ContentType(acceptance ...string) string {
parser := newHeaderParser(n.header, false)
return parser.selectOffer(acceptance, parser.parse(headerContentType))
}
// Type returns the most preferred content type from the HTTP Accept header. // Type returns the most preferred content type from the HTTP Accept header.
// If nothing accepted, then empty string is returned. // If nothing accepted, then empty string is returned.
func (n *Negotiation) Type(offers ...string) (bestOffer string) { func (n *Negotiation) Type(offers ...string) (bestOffer string) {
......
...@@ -5,6 +5,24 @@ import ( ...@@ -5,6 +5,24 @@ import (
"testing" "testing"
) )
func TestContentType(t *testing.T) {
req, err := http.NewRequest("GET", "/", nil)
if err != nil {
t.Fatal(err)
}
req.Header.Set("Content-Type", "application/json")
n := New(req.Header)
if n.ContentType("application/json") != "application/json" {
t.Errorf("handler returned wrong status code: got %v want %v",
n.Type("application/json"), "application/json")
}
}
func TestNegotiationLanguage(t *testing.T) { func TestNegotiationLanguage(t *testing.T) {
req, err := http.NewRequest("GET", "/", nil) req, err := http.NewRequest("GET", "/", nil)
......
...@@ -5,4 +5,5 @@ const ( ...@@ -5,4 +5,5 @@ const (
headerAcceptLanguage = "Accept-Language" headerAcceptLanguage = "Accept-Language"
headerAcceptEncoding = "Accept-Encoding" headerAcceptEncoding = "Accept-Encoding"
headerAcceptCharset = "Accept-Charset" headerAcceptCharset = "Accept-Charset"
headerContentType = "Content-Type"
) )
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment