make versioning.Group a Party compatible by using a type alias on its embedded field

was reported as missing of the a Party method, the type alias is a good hack to solve that
This commit is contained in:
Gerasimos (Makis) Maropoulos 2021-01-05 18:16:32 +02:00
parent 8b710b1302
commit 7aa2d1f9d5
No known key found for this signature in database
GPG Key ID: 5DBE766BD26A54E7
2 changed files with 19 additions and 3 deletions

View File

@ -67,6 +67,10 @@ func examplePerParty(app *iris.Application) {
usersAPIV2.Post("/", func(ctx iris.Context) {
ctx.Writef("v2 resource: /api/users post handler")
})
// version 3, pass it as a common iris.Party.
usersAPIV3 := versioning.NewGroup(usersAPI, ">= 3, < 4")
registerAPIV3(usersAPIV3)
}
func catsVersionExactly1Handler(ctx iris.Context) {
@ -76,3 +80,10 @@ func catsVersionExactly1Handler(ctx iris.Context) {
func catsV2Handler(ctx iris.Context) {
ctx.Writef("v2 resource: /api/cats handler")
}
func registerAPIV3(p iris.Party) {
p.Get("/", func(ctx iris.Context) {
ctx.Writef("v3 resource: /api/users handler")
})
// [...]
}

View File

@ -5,10 +5,15 @@ import (
"github.com/kataras/iris/v12/core/router"
)
// API is a type alias of router.Party.
// This is required in order for a Group instance
// to implement the Party interface without field conflict.
type API = router.Party
// Group is a group of version-based routes.
// One version per one or more routes.
type Group struct {
router.Party
API
// Information not currently in-use.
version string
@ -32,7 +37,7 @@ func NewGroup(r router.Party, version string) *Group {
r.UseOnce(Handler(version)) // this is required in order to not populate this middleware to the next group.
return &Group{
Party: r,
API: r,
version: version,
}
}
@ -43,7 +48,7 @@ func (g *Group) Deprecated(options DeprecationOptions) *Group {
// store it for future use, e.g. collect all deprecated APIs and notify the developer.
g.deprecation = options
g.Party.UseOnce(func(ctx *context.Context) {
g.API.UseOnce(func(ctx *context.Context) {
WriteDeprecated(ctx, options)
ctx.Next()
})