3
0

upd(codegen): custom types, camel case structs

This commit is contained in:
Tit Petric
2019-04-03 14:38:13 +02:00
parent 37c4499d36
commit a1aadeaa2f
8 changed files with 41 additions and 25 deletions

View File

@@ -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) {

View File

@@ -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}

View File

@@ -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}

View File

@@ -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}

View File

@@ -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}
})
})
}

View File

@@ -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}

View File

@@ -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}

View File

@@ -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) {