@@ -20,7 +20,7 @@ import (
2020
2121type (
2222 Echo struct {
23- Router * router
23+ router * Router
2424 prefix string
2525 middleware []MiddlewareFunc
2626 http2 bool
@@ -33,10 +33,12 @@ type (
3333 pool sync.Pool
3434 debug bool
3535 }
36+
3637 HTTPError struct {
3738 code int
3839 message string
3940 }
41+
4042 Middleware interface {}
4143 MiddlewareFunc func (HandlerFunc ) HandlerFunc
4244 Handler interface {}
@@ -99,6 +101,13 @@ const (
99101 ContentLength = "Content-Length"
100102 ContentType = "Content-Type"
101103 Authorization = "Authorization"
104+ Upgrade = "Upgrade"
105+
106+ //-----------
107+ // Protocols
108+ //-----------
109+
110+ WebSocket = "websocket"
102111)
103112
104113var (
@@ -122,30 +131,12 @@ var (
122131 RendererNotRegistered = errors .New ("echo ⇒ renderer not registered" )
123132)
124133
125- func NewHTTPError (code int , msg ... string ) * HTTPError {
126- he := & HTTPError {code : code , message : http .StatusText (code )}
127- for _ , m := range msg {
128- he .message = m
129- }
130- return he
131- }
132-
133- // Code returns code.
134- func (e * HTTPError ) Code () int {
135- return e .code
136- }
137-
138- // Error returns message.
139- func (e * HTTPError ) Error () string {
140- return e .message
141- }
142-
143134// New creates an Echo instance.
144135func New () (e * Echo ) {
145136 e = & Echo {
146137 uris : make (map [Handler ]string ),
147138 }
148- e .Router = NewRouter (e )
139+ e .router = NewRouter (e )
149140 e .pool .New = func () interface {} {
150141 return NewContext (nil , new (Response ), e )
151142 }
@@ -196,6 +187,11 @@ func (e *Echo) Group(pfx string, m ...Middleware) *Echo {
196187 return & g
197188}
198189
190+ // Router returns router.
191+ func (e * Echo ) Router () * Router {
192+ return e .router
193+ }
194+
199195// HTTP2 enables HTTP2 support.
200196func (e * Echo ) HTTP2 (on bool ) {
201197 e .http2 = on
@@ -302,7 +298,7 @@ func (e *Echo) WebSocket(path string, h HandlerFunc) {
302298func (e * Echo ) add (method , path string , h Handler ) {
303299 key := runtime .FuncForPC (reflect .ValueOf (h ).Pointer ()).Name ()
304300 e .uris [key ] = path
305- e .Router .Add (method , e .prefix + path , wrapHandler (h ), e )
301+ e .router .Add (method , e .prefix + path , wrapHandler (h ), e )
306302}
307303
308304// Index serves index file.
@@ -361,7 +357,7 @@ func (e *Echo) URL(h Handler, params ...interface{}) string {
361357
362358func (e * Echo ) ServeHTTP (w http.ResponseWriter , r * http.Request ) {
363359 c := e .pool .Get ().(* Context )
364- h , echo := e .Router .Find (r .Method , r .URL .Path , c )
360+ h , echo := e .router .Find (r .Method , r .URL .Path , c )
365361 if echo != nil {
366362 e = echo
367363 }
@@ -419,6 +415,24 @@ func (e *Echo) run(s *http.Server, files ...string) {
419415 }
420416}
421417
418+ func NewHTTPError (code int , msg ... string ) * HTTPError {
419+ he := & HTTPError {code : code , message : http .StatusText (code )}
420+ for _ , m := range msg {
421+ he .message = m
422+ }
423+ return he
424+ }
425+
426+ // Code returns code.
427+ func (e * HTTPError ) Code () int {
428+ return e .code
429+ }
430+
431+ // Error returns message.
432+ func (e * HTTPError ) Error () string {
433+ return e .message
434+ }
435+
422436// wraps middleware
423437func wrapMiddleware (m Middleware ) MiddlewareFunc {
424438 switch m := m .(type ) {
0 commit comments