Permalink
| package lion | |
| import ( | |
| "net/http" | |
| "golang.org/x/net/context" | |
| ) | |
| // Resource defines the minimum required methods | |
| type Resource interface{} | |
| type ResourceUses interface { | |
| Uses() Middlewares | |
| } | |
| // GetResourceMiddlewares is an interface for defining middlewares used in Resource method | |
| type GetResourceMiddlewares interface { | |
| GetMiddlewares() Middlewares | |
| } | |
| // PostResourceMiddlewares is an interface for defining middlewares used in Resource method | |
| type PostResourceMiddlewares interface { | |
| PostMiddlewares() Middlewares | |
| } | |
| // PutResourceMiddlewares is an interface for defining middlewares used in Resource method | |
| type PutResourceMiddlewares interface { | |
| PutMiddlewares() Middlewares | |
| } | |
| // DeleteResourceMiddlewares is an interface for defining middlewares used in Resource method | |
| type DeleteResourceMiddlewares interface { | |
| DeleteMiddlewares() Middlewares | |
| } | |
| // GetResource is an interface for defining a HandlerFunc used in Resource method | |
| type GetResource interface { | |
| Get(c context.Context, w http.ResponseWriter, r *http.Request) | |
| } | |
| // PostResource is an interface for defining a HandlerFunc used in Resource method | |
| type PostResource interface { | |
| Post(c context.Context, w http.ResponseWriter, r *http.Request) | |
| } | |
| // PutResource is an interface for defining a HandlerFunc used in Resource method | |
| type PutResource interface { | |
| Put(c context.Context, w http.ResponseWriter, r *http.Request) | |
| } | |
| // DeleteResource is an interface for defining a HandlerFunc used in Resource method | |
| type DeleteResource interface { | |
| Delete(c context.Context, w http.ResponseWriter, r *http.Request) | |
| } | |
| // Resource registers a Resource with the corresponding pattern | |
| func (r *Router) Resource(pattern string, resource Resource) { | |
| sub := r.Group(pattern) | |
| if usesRes, ok := resource.(ResourceUses); ok { | |
| if len(usesRes.Uses()) > 0 { | |
| sub.Use(usesRes.Uses()...) | |
| } | |
| } | |
| if res, ok := resource.(GetResource); ok { | |
| s := sub.Group("/") | |
| if mw, ok := resource.(GetResourceMiddlewares); ok { | |
| s.Use(mw.GetMiddlewares()...) | |
| } | |
| s.GetFunc("/", res.Get) | |
| } | |
| if res, ok := resource.(PostResource); ok { | |
| s := sub.Group("/") | |
| if mw, ok := resource.(PostResourceMiddlewares); ok { | |
| s.Use(mw.PostMiddlewares()...) | |
| } | |
| s.PostFunc("/", res.Post) | |
| } | |
| if res, ok := resource.(PutResource); ok { | |
| s := sub.Group("/") | |
| if mw, ok := resource.(PutResourceMiddlewares); ok { | |
| s.Use(mw.PutMiddlewares()...) | |
| } | |
| s.PutFunc("/", res.Put) | |
| } | |
| if res, ok := resource.(DeleteResource); ok { | |
| s := sub.Group("/") | |
| if mw, ok := resource.(DeleteResourceMiddlewares); ok { | |
| s.Use(mw.DeleteMiddlewares()...) | |
| } | |
| s.DeleteFunc("/", res.Delete) | |
| } | |
| } |