alimy / mir

Mir is a toolkit for register method handler to http engine router(eg: gin,echo,iris,mux,httprouter) use struct tag info.
https://alimy.github.io/mir/
Apache License 2.0
80 stars 13 forks source link

add Context primitive indicator use Engine's raw handler as method #42

Closed alimy closed 9 months ago

alimy commented 10 months ago

功能特性

type render interface { Render(*gin.Context) }

type default interface { Bind(gin.Context, any) mir.Error Render(gin.Context, any, mir.Error) }

type Site interface { default

// Chain provide handlers chain for gin
Chain() gin.HandlersChain

Assets(*gin.Context)
Index() mir.Error

mustEmbedUnimplementedSiteServant()

}

// RegisterSiteServant register Site servant to gin func RegisterSiteServant(e *gin.Engine, s Site, m ...SiteChain) { var cc SiteChain if len(m) > 0 { cc = m[0] } else { cc = &UnimplementedSiteChain{} } router := e // use chain for router middlewares := s.Chain() router.Use(middlewares...)

router.Handle("GET", "/assets/:name", s.Assets) 
router.Handle("GET", "/index/", append(cc.ChainIndex(), func(c *gin.Context) {
    select {
    case <-c.Request.Context().Done():
        return
    default:
    }

    s.Render(c, nil, s.Index())
})...)

}


具体示例请参考项目的examples。

### 适配进度
- [x] gin
- [x] chi
- [x] echo
- [x] fiber
- [x] hertz
- [x] httprouter
- [x] iris
- [x] macaron
- [x] mux
- [x] mirc
alimy commented 10 months ago

优化了Context的语义: