Browse Source

Experimenting with golang.org/x/net/context

Manu Mtz-Almeida 10 years ago
parent
commit
f9952b0545
1 changed files with 26 additions and 12 deletions
  1. 26 12
      context.go

+ 26 - 12
context.go

@@ -10,6 +10,7 @@ import (
 	"math"
 	"net/http"
 	"strings"
+	"time"
 
 	"github.com/gin-gonic/gin/binding"
 	"github.com/gin-gonic/gin/render"
@@ -29,6 +30,8 @@ const (
 
 const AbortIndex = math.MaxInt8 / 2
 
+var _ context.Context = &Context{}
+
 // Param is a single URL parameter, consisting of a key and a value.
 type Param struct {
 	Key   string
@@ -59,7 +62,6 @@ func (ps Params) ByName(name string) (va string) {
 // Context is the most important part of gin. It allows us to pass variables between middleware,
 // manage the flow, validate the JSON of a request and render a JSON response for example.
 type Context struct {
-	context.Context
 	writermem responseWriter
 	Request   *http.Request
 	Writer    ResponseWriter
@@ -261,17 +263,6 @@ func (c *Context) MustGet(key string) interface{} {
 	}
 }
 
-func (c *Context) Value(key interface{}) interface{} {
-	if key == 0 {
-		return c.Request
-	}
-	if keyAsString, ok := key.(string); ok {
-		val, _ := c.Get(keyAsString)
-		return val
-	}
-	return c.Context.Value(key)
-}
-
 /************************************/
 /********* PARSING REQUEST **********/
 /************************************/
@@ -469,3 +460,26 @@ func (c *Context) NegotiateFormat(offered ...string) string {
 func (c *Context) SetAccepted(formats ...string) {
 	c.Accepted = formats
 }
+
+func (c *Context) Deadline() (deadline time.Time, ok bool) {
+	return
+}
+
+func (c *Context) Done() <-chan struct{} {
+	return nil
+}
+
+func (c *Context) Err() error {
+	return nil
+}
+
+func (c *Context) Value(key interface{}) interface{} {
+	if key == 0 {
+		return c.Request
+	}
+	if keyAsString, ok := key.(string); ok {
+		val, _ := c.Get(keyAsString)
+		return val
+	}
+	return nil
+}