Skip to content

Commit 6633a1f

Browse files
committed
New renderer interface #21
Signed-off-by: Vishal Rana <vr@labstack.com>
1 parent da18bc1 commit 6633a1f

File tree

6 files changed

+316
-309
lines changed

6 files changed

+316
-309
lines changed

context.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func (c *Context) Bind(v interface{}) error {
4848
func (c *Context) Render(code int, name string, data interface{}) error {
4949
c.Response.Header().Set(HeaderContentType, MIMEHTML+"; charset=utf-8")
5050
c.Response.WriteHeader(code)
51-
return c.echo.renderFunc(c.Response, name, data)
51+
return c.echo.renderer.Render(c.Response, name, data)
5252
}
5353

5454
// JSON sends an application/json response with status code.

context_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ func TestContext(t *testing.T) {
1212
b, _ := json.Marshal(u1)
1313
r, _ := http.NewRequest(POST, "/users/1", bytes.NewReader(b))
1414
c := &Context{
15-
Response: &response{writer: httptest.NewRecorder()},
15+
Response: &response{Writer: httptest.NewRecorder()},
1616
Request: r,
1717
params: make(Params, 5),
1818
store: make(store),

echo.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@ type (
1515
middleware []MiddlewareFunc
1616
maxParam byte
1717
notFoundHandler HandlerFunc
18-
renderFunc RenderFunc
18+
renderer Renderer
1919
pool sync.Pool
2020
}
2121
Middleware interface{}
2222
MiddlewareFunc func(HandlerFunc) HandlerFunc
2323
Handler interface{}
2424
HandlerFunc func(*Context)
25-
RenderFunc func(io.Writer, string, interface{}) error
25+
Renderer interface {
26+
Render(io.Writer, string, interface{}) error
27+
}
2628
)
2729

2830
const (
@@ -72,9 +74,6 @@ func New() (e *Echo) {
7274
notFoundHandler: func(c *Context) {
7375
http.Error(c.Response, http.StatusText(http.StatusNotFound), http.StatusNotFound)
7476
},
75-
renderFunc: func(w io.Writer, name string, data interface{}) (err error) {
76-
return
77-
},
7877
}
7978
e.Router = NewRouter(e)
8079
e.pool.New = func() interface{} {
@@ -115,9 +114,9 @@ func (e *Echo) NotFoundHandler(h Handler) {
115114
e.notFoundHandler = wrapH(h)
116115
}
117116

118-
// RenderFunc sets a custom RenderFunc.
119-
func (e *Echo) RenderFunc(r RenderFunc) {
120-
e.renderFunc = r
117+
// Renderer sets an HTML Renderer.
118+
func (e *Echo) Renderer(r Renderer) {
119+
e.renderer = r
121120
}
122121

123122
// Use adds handler to the middleware chain.
@@ -197,7 +196,8 @@ func (e *Echo) Index(file string) {
197196
}
198197

199198
func (e *Echo) ServeHTTP(w http.ResponseWriter, r *http.Request) {
200-
h, c, echo := e.Router.Find(r.Method, r.URL.Path)
199+
c := e.pool.Get().(*Context)
200+
h, echo := e.Router.Find(r.Method, r.URL.Path, c.params)
201201
if echo != nil {
202202
e = echo
203203
}

response.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ import (
77

88
type (
99
response struct {
10-
writer http.ResponseWriter
10+
Writer http.ResponseWriter
1111
status int
1212
size int
1313
committed bool
1414
}
1515
)
1616

1717
func (r *response) Header() http.Header {
18-
return r.writer.Header()
18+
return r.Writer.Header()
1919
}
2020

2121
func (r *response) WriteHeader(n int) {
@@ -25,12 +25,12 @@ func (r *response) WriteHeader(n int) {
2525
return
2626
}
2727
r.status = n
28-
r.writer.WriteHeader(n)
28+
r.Writer.WriteHeader(n)
2929
r.committed = true
3030
}
3131

3232
func (r *response) Write(b []byte) (n int, err error) {
33-
n, err = r.writer.Write(b)
33+
n, err = r.Writer.Write(b)
3434
r.size += n
3535
return n, err
3636
}
@@ -44,6 +44,6 @@ func (r *response) Size() int {
4444
}
4545

4646
func (r *response) reset(w http.ResponseWriter) {
47-
r.writer = w
47+
r.Writer = w
4848
r.committed = false
4949
}

router.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,7 @@ func lcp(a, b string) (i int) {
157157
return
158158
}
159159

160-
func (r *router) Find(method, path string) (h HandlerFunc, c *Context, echo *Echo) {
161-
c = r.echo.pool.Get().(*Context)
160+
func (r *router) Find(method, path string, params Params) (h HandlerFunc, echo *Echo) {
162161
cn := r.trees[method] // Current node as root
163162
search := path
164163
n := 0 // Param count
@@ -182,15 +181,15 @@ func (r *router) Find(method, path string) (h HandlerFunc, c *Context, echo *Ech
182181
i, l := 0, len(search)
183182
for ; i < l && search[i] != '/'; i++ {
184183
}
185-
p := c.params[:n+1]
184+
p := params[:n+1]
186185
p[n].Name = cn.prefix[1:]
187186
p[n].Value = search[:i]
188187
n++
189188
search = search[i:]
190189
} else if cn.has == cnode {
191190
// Catch-all node
192191
cn = cn.edges[0]
193-
p := c.params[:n+1]
192+
p := params[:n+1]
194193
p[n].Name = "_name"
195194
p[n].Value = search
196195
search = "" // End search
@@ -215,8 +214,9 @@ func (r *router) Find(method, path string) (h HandlerFunc, c *Context, echo *Ech
215214
}
216215

217216
func (r *router) ServeHTTP(w http.ResponseWriter, req *http.Request) {
218-
h, c, _ := r.Find(req.Method, req.URL.Path)
219-
c.Response.writer = w
217+
c := r.echo.pool.Get().(*Context)
218+
h, _ := r.Find(req.Method, req.URL.Path, c.params)
219+
c.Response.Writer = w
220220
if h != nil {
221221
h(c)
222222
} else {

0 commit comments

Comments
 (0)