upd(codegen): custom types, camel case structs
This commit is contained in:
@@ -18,6 +18,7 @@ error_reporting(E_ALL^E_NOTICE);
|
||||
include(__DIR__ . "/vendor/autoload.php");
|
||||
|
||||
function capitalize($name) {
|
||||
$name = str_replace("_", "/", $name);
|
||||
$names = explode("/", $name);
|
||||
return implode("", array_map("ucfirst", $names));
|
||||
}
|
||||
@@ -26,7 +27,7 @@ function expose($name) {
|
||||
if ($name == "id") {
|
||||
return "ID";
|
||||
}
|
||||
return ucfirst($name);
|
||||
return capitalize($name);
|
||||
}
|
||||
|
||||
function array_change_key_case_recursive($arr) {
|
||||
|
||||
@@ -3,6 +3,13 @@
|
||||
|
||||
{api.description}
|
||||
|
||||
| Method | Endpoint | Purpose |
|
||||
| ------ | -------- | ------- |
|
||||
{foreach $api.apis as $name => $call}
|
||||
| `{call.method}` | `{api.path}{call.path}` | {call.title} |
|
||||
{/foreach}
|
||||
|
||||
|
||||
{foreach $api.apis as $name => $call}
|
||||
## {call.title}
|
||||
|
||||
@@ -28,4 +35,6 @@
|
||||
|
||||
{/foreach}
|
||||
|
||||
---
|
||||
|
||||
{/foreach}
|
||||
@@ -2,21 +2,25 @@ package {package}
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/crusttech/crust/{project}/rest/request"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/crusttech/crust/{project}/rest/request"
|
||||
)
|
||||
|
||||
var _ = errors.Wrap
|
||||
|
||||
type {name} struct {}
|
||||
type {name|expose} struct {
|
||||
// xxx service.XXXService
|
||||
}
|
||||
|
||||
func ({name}) New() *{name} {
|
||||
return &{name}{ldelim}{rdelim}
|
||||
func ({name|expose}) New() *{name|expose} {
|
||||
return &{name|expose}{ldelim}{rdelim}
|
||||
}
|
||||
|
||||
{foreach $calls as $call}
|
||||
func (ctrl *{name}) {call.name|capitalize}(ctx context.Context, r *request.{name|ucfirst}{call.name|capitalize}) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: {name}.{call.name}")
|
||||
func (ctrl *{name|expose}) {call.name|capitalize}(ctx context.Context, r *request.{name|expose}{call.name|capitalize}) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: {name|expose}.{call.name}")
|
||||
}
|
||||
|
||||
{/foreach}
|
||||
|
||||
@@ -9,8 +9,8 @@ import (
|
||||
)
|
||||
|
||||
{foreach $calls as $call}
|
||||
func ({self}h *{name}Handlers) {call.name|capitalize}(w http.ResponseWriter, r *http.Request) {
|
||||
func ({self}h *{name|expose}Handlers) {call.name|capitalize}(w http.ResponseWriter, r *http.Request) {
|
||||
params := {name|capitalize}{call.name|capitalize}Request{}.new()
|
||||
resputil.JSON(w, params.Fill(r), func() (interface{}, error) { return {self}h.{name}.{call.name|capitalize}(r.Context(), params) })
|
||||
resputil.JSON(w, params.Fill(r), func() (interface{}, error) { return {self}h.{name|expose}.{call.name|capitalize}(r.Context(), params) })
|
||||
}
|
||||
{/foreach}
|
||||
|
||||
@@ -3,31 +3,32 @@ package {package}
|
||||
{load warning.tpl}
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"context"
|
||||
"github.com/go-chi/chi"
|
||||
|
||||
"net/http"
|
||||
|
||||
"github.com/go-chi/chi"
|
||||
"github.com/titpetric/factory/resputil"
|
||||
|
||||
"github.com/crusttech/crust/{project}/rest/request"
|
||||
)
|
||||
|
||||
// Internal API interface
|
||||
type {name}API interface {
|
||||
type {name|expose}API interface {
|
||||
{foreach $calls as $call}
|
||||
{call.name|capitalize}(context.Context, *request.{name|expose}{call.name|capitalize}) (interface{}, error)
|
||||
{/foreach}
|
||||
}
|
||||
|
||||
// HTTP API interface
|
||||
type {name} struct {
|
||||
type {name|expose} struct {
|
||||
{foreach $calls as $call}
|
||||
{call.name|capitalize} func(http.ResponseWriter, *http.Request)
|
||||
{/foreach}
|
||||
}
|
||||
|
||||
func New{name}({self}h {name}API) *{name} {
|
||||
return &{name}{ldelim}{newline}
|
||||
func New{name|expose}({self}h {name|expose}API) *{name|expose} {
|
||||
return &{name|expose}{ldelim}{newline}
|
||||
{foreach $calls as $call}
|
||||
{call.name|capitalize}: func(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
@@ -40,13 +41,11 @@ func New{name}({self}h {name}API) *{name} {
|
||||
{rdelim}
|
||||
}
|
||||
|
||||
func ({self}h *{name})MountRoutes(r chi.Router, middlewares ...func(http.Handler) http.Handler) {
|
||||
func ({self}h *{name|expose})MountRoutes(r chi.Router, middlewares ...func(http.Handler) http.Handler) {
|
||||
r.Group(func (r chi.Router) {
|
||||
r.Use(middlewares...)
|
||||
r.Route("{api.path}", func(r chi.Router) {
|
||||
{foreach $api.apis as $call}
|
||||
r.{eval echo capitalize(strtolower($call.method))}("{call.path}", {self}h.{call.name|capitalize})
|
||||
r.{eval echo capitalize(strtolower($call.method))}("{api.path}{call.path}", {self}h.{call.name|capitalize})
|
||||
{/foreach}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -4,13 +4,14 @@ package {package}
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/go-chi/chi"
|
||||
)
|
||||
|
||||
var _ = chi.URLParam
|
||||
|
||||
{foreach $calls as $call}
|
||||
// {name} {call.name} request parameters
|
||||
// {name|expose} {call.name} request parameters
|
||||
type {name|expose}{call.name|capitalize}Request struct {
|
||||
{foreach $call.parameters as $params}
|
||||
{foreach $params as $method => $param}
|
||||
|
||||
@@ -4,10 +4,11 @@ package {package}
|
||||
|
||||
import (
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
"net/http"
|
||||
"encoding/json"
|
||||
"mime/multipart"
|
||||
"strings"
|
||||
|
||||
"github.com/go-chi/chi"
|
||||
"github.com/pkg/errors"
|
||||
@@ -20,7 +21,7 @@ var _ = chi.URLParam
|
||||
var _ = multipart.FileHeader{}
|
||||
|
||||
{foreach $calls as $call}
|
||||
// {name} {call.name} request parameters
|
||||
// {name|expose} {call.name} request parameters
|
||||
type {name|expose}{call.name|capitalize} struct {
|
||||
{foreach $call.parameters as $params}
|
||||
{foreach $params as $method => $param}
|
||||
@@ -78,7 +79,7 @@ func ({self}Req *{name|expose}{call.name|capitalize}) Fill(r *http.Request) (err
|
||||
return err
|
||||
}
|
||||
{else}
|
||||
{self}Req.{param.name|expose} = {if ($param.type !== "string")}{$parsers[$param.type]}(val){else}val{/if}{EOL}
|
||||
{self}Req.{param.name|expose} = {if ($param.type !== "string")}{if isset($parsers[$param.type])}{$parsers[$param.type]}{else}{$param.type}{/if}(val){else}val{/if}{EOL}
|
||||
{/if}
|
||||
}{/if}
|
||||
{/foreach}
|
||||
|
||||
@@ -3,11 +3,12 @@ package {package}
|
||||
{load warning.tpl}
|
||||
|
||||
import (
|
||||
"github.com/go-chi/chi"
|
||||
"net/http"
|
||||
|
||||
"github.com/go-chi/chi"
|
||||
)
|
||||
|
||||
func ({self}h *{name}Handlers)MountRoutes(r chi.Router, middlewares ...func(http.Handler) http.Handler) {
|
||||
func ({self}h *{name|expose}Handlers)MountRoutes(r chi.Router, middlewares ...func(http.Handler) http.Handler) {
|
||||
r.Group(func (r chi.Router) {
|
||||
r.Use(middlewares...)
|
||||
r.Route("{api.path}", func(r chi.Router) {
|
||||
|
||||
Reference in New Issue
Block a user