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) {
```
### 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
With the `Language` function you can negotiate the language of HTTP request.
......@@ -66,7 +88,6 @@ func handleRequest(w http.ResponseWriter, r *http.Request) {
}
}
```
### Charset Negotiation
......@@ -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
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 {
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.
// If nothing accepted, then empty string is returned.
func (n *Negotiation) Type(offers ...string) (bestOffer string) {
......
......@@ -5,6 +5,24 @@ import (
"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) {
req, err := http.NewRequest("GET", "/", nil)
......
......@@ -5,4 +5,5 @@ const (
headerAcceptLanguage = "Accept-Language"
headerAcceptEncoding = "Accept-Encoding"
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