Restructure generated file structure (#167)
* Restructure templates Update integration tests with new generated file structure Update documentation for new file structure Resolve #166 * Add DO NOT EDIT! to files that are overwritten on regeneration * Update gitignore to exclude generated example services
This commit is contained in:
Родитель
df5873b83f
Коммит
b412131d40
|
@ -5,6 +5,10 @@
|
||||||
# session
|
# session
|
||||||
Session.vi
|
Session.vi
|
||||||
|
|
||||||
|
# generated example services
|
||||||
|
_example/*
|
||||||
|
!_example/echo.proto
|
||||||
|
|
||||||
# Prevents accidentally including a problematic folder within the `vendor/`
|
# Prevents accidentally including a problematic folder within the `vendor/`
|
||||||
# folder.
|
# folder.
|
||||||
vendor/github.com/Sirupsen/logrus/examples/
|
vendor/github.com/Sirupsen/logrus/examples/
|
||||||
|
|
|
@ -63,8 +63,6 @@ overwrite user code in the /NAME-service/handlers directory
|
||||||
|
|
||||||
Additional internal packages of note used by these programs are:
|
Additional internal packages of note used by these programs are:
|
||||||
|
|
||||||
- `astmodifier`, located in `gengokit/astmodifier/`, used to
|
|
||||||
modify go files in place, and used by gengokit`
|
|
||||||
- `deftree`, located in `deftree/`, which makes sense of the protobuf file
|
- `deftree`, located in `deftree/`, which makes sense of the protobuf file
|
||||||
passed to it by `protoc`, and is used by `gengokit` and
|
passed to it by `protoc`, and is used by `gengokit` and
|
||||||
`gendoc`
|
`gendoc`
|
||||||
|
|
|
@ -46,7 +46,7 @@ add [http annotations](
|
||||||
https://github.com/googleapis/googleapis/blob/928a151b2f871b4239b7707e1bb59258df3fe10a/google/api/http.proto#L36)
|
https://github.com/googleapis/googleapis/blob/928a151b2f871b4239b7707e1bb59258df3fe10a/google/api/http.proto#L36)
|
||||||
for HTTP 1.1/JSON transport!
|
for HTTP 1.1/JSON transport!
|
||||||
|
|
||||||
Then you open the `handlers/server/server_handler.go`,
|
Then you open the `handlers/handlers.go`,
|
||||||
add you business logic, and you're good to go.
|
add you business logic, and you're good to go.
|
||||||
|
|
||||||
Here is an example service definition: [Echo Service](./_example/echo.proto)
|
Here is an example service definition: [Echo Service](./_example/echo.proto)
|
||||||
|
|
82
TUTORIAL.md
82
TUTORIAL.md
|
@ -69,30 +69,32 @@ In your terminal, go to the folder containing echo.proto and run `truss *.proto`
|
||||||
```
|
```
|
||||||
.
|
.
|
||||||
├── echo-service
|
├── echo-service
|
||||||
│ ├── docs
|
| ├── cmd
|
||||||
│ │ └── docs.md
|
| │ ├── echo
|
||||||
│ ├── generated
|
| │ │ └── main.go
|
||||||
│ │ └── ...
|
| │ └── echo-server
|
||||||
│ ├── handlers
|
| │ └── main.go
|
||||||
│ │ └── server
|
| ├── docs
|
||||||
│ │ └── server_handler.go
|
| │ └── docs.md
|
||||||
│ ├── middlewares
|
| ├── echo.pb.go
|
||||||
│ │ └── ...
|
| ├── handlers
|
||||||
│ ├── echo-cli-client
|
| │ ├── handlers.go
|
||||||
│ │ └── client_main.go
|
| │ └── hooks.go
|
||||||
│ ├── echo-server
|
| ├── middlewares
|
||||||
│ │ └── server_main.go
|
| │ ├── endpoints.go
|
||||||
│ └── echo.pb.go
|
| │ └── service.go
|
||||||
├── echo.proto
|
| └── svc
|
||||||
|
| └── ...
|
||||||
|
└── echo.proto
|
||||||
```
|
```
|
||||||
From the top down, within echo-service/:
|
From the top down, within `echo-service/`:
|
||||||
- docs/ contains the generated documentation of the service API
|
- `docs/` contains the generated documentation of the service API
|
||||||
- generated/ contains the wiring and encoding protocols necessary for service communication
|
- `svc/` contains the wiring and encoding protocols necessary for service communication (generated code)
|
||||||
- handlers/server/server_handler.go is populated with stubs where you will add the business logic
|
- `handlers/handlers.go` is populated with stubs where you will add the business logic
|
||||||
- middlewares/ is where you can put the middlewares (NOP by default)
|
- `middlewares/` is where you can put the middlewares (NOP by default)
|
||||||
- echo-cli-client/ contains the client side CLI (useful for testing)
|
- `cmd/echo/` contains the client side CLI (useful for testing)
|
||||||
- echo-server/ contains the service main, which you will build and run shortly
|
- `cmd/echo-server/` contains the service main, which you will build and run shortly
|
||||||
- echo.pb.go contains the RPC interface definitions and supporting structures that have been translated from echo.proto to golang
|
- `echo.pb.go` contains the RPC interface definitions and supporting structures that have been translated from `echo.proto` to golang
|
||||||
|
|
||||||
If you try to build and run your service now, it will respond with empty messages. There is no business logic yet! We shall add it in the next step.
|
If you try to build and run your service now, it will respond with empty messages. There is no business logic yet! We shall add it in the next step.
|
||||||
|
|
||||||
|
@ -100,7 +102,7 @@ You can safely modify only the files in handlers/ and middlewares/. Changes to a
|
||||||
|
|
||||||
## Implement business logic
|
## Implement business logic
|
||||||
|
|
||||||
Open `handlers/server/server_handler.go` using your favorite editor. Find the Echo function stub. It should look like this:
|
Open `handlers/handlers.go` using your favorite editor. Find the Echo function stub. It should look like this:
|
||||||
```
|
```
|
||||||
func (s echoService) Echo(ctx context.Context, in *pb.EchoRequest) (*pb.EchoResponse, error) {
|
func (s echoService) Echo(ctx context.Context, in *pb.EchoRequest) (*pb.EchoResponse, error) {
|
||||||
var resp pb.EchoResponse
|
var resp pb.EchoResponse
|
||||||
|
@ -125,25 +127,25 @@ func (s echoService) Echo(ctx context.Context, in *pb.EchoRequest) (*pb.EchoResp
|
||||||
## Build/Run the client and server executables
|
## Build/Run the client and server executables
|
||||||
|
|
||||||
From the directory containing echo.proto run
|
From the directory containing echo.proto run
|
||||||
`go build echo-service/echo-cli-client/client_main.go` and
|
`go build echo-service/echo` and
|
||||||
`go build echo-service/echo-server/server_main.go`
|
`go build echo-service/echo`
|
||||||
|
|
||||||
Create another terminal window to run the server in, navigate to the same directory and launch the server:
|
Create another terminal window to run the server in, navigate to the same directory and launch the server:
|
||||||
`./server_main`
|
`./echo-server`
|
||||||
When server starts up, you should see something like this:
|
When server starts up, you should see something like this:
|
||||||
```
|
```
|
||||||
ts=2016-12-06T23:25:14Z caller=server_main.go:55 msg=hello
|
ts=2016-12-06T23:25:14Z caller=main.go:55 msg=hello
|
||||||
ts=2016-12-06T23:25:14Z caller=server_main.go:106 transport=HTTP addr=:5050
|
ts=2016-12-06T23:25:14Z caller=main.go:106 transport=HTTP addr=:5050
|
||||||
ts=2016-12-06T23:25:14Z caller=server_main.go:98 transport=debug addr=:5060
|
ts=2016-12-06T23:25:14Z caller=main.go:98 transport=debug addr=:5060
|
||||||
ts=2016-12-06T23:25:14Z caller=server_main.go:124 transport=gRPC addr=:5040
|
ts=2016-12-06T23:25:14Z caller=main.go:124 transport=gRPC addr=:5040
|
||||||
|
|
||||||
```
|
```
|
||||||
The server is now waiting for incoming messages.
|
The server is now waiting for incoming messages.
|
||||||
At this point we can send a request to the server via networking tools (telnet, curl) and construct message directly, or we can use the client CLI.
|
At this point we can send a request to the server via networking tools (telnet, curl) and construct message directly, or we can use the client CLI.
|
||||||
|
|
||||||
Let's do the latter, in your first terminal. To learn how to launch client with proper parameters run `./client_main -help`. The printout will tell you what methods the service supports (-method flag options) and all the additional flags that must be set to call a certain method (flags of format -method_name.parameter_name).
|
Let's do the latter, in your first terminal. To learn how to launch client with proper parameters run `./echo -help`. The printout will tell you what methods the service supports and all the additional flags that must be set to call a certain method
|
||||||
|
|
||||||
Now run `./client_main -method echo -echo.in “hello microservices”`
|
Now run `./echo echo -in “hello microservices”`
|
||||||
The client terminal will display messages that were sent and received.
|
The client terminal will display messages that were sent and received.
|
||||||
|
|
||||||
You can also specify the address to send messages to via -grpc.addr or -http.addr flags (e.g. `-grpc.addr localhost:5040`), should you want to change the port the server runs on, or test it out on separate machines.
|
You can also specify the address to send messages to via -grpc.addr or -http.addr flags (e.g. `-grpc.addr localhost:5040`), should you want to change the port the server runs on, or test it out on separate machines.
|
||||||
|
@ -152,14 +154,14 @@ To shutdown the server, press Ctrl+C in the server terminal
|
||||||
|
|
||||||
## Implement more things!
|
## Implement more things!
|
||||||
|
|
||||||
The following is left as an exersise to the reader:
|
The following is left as an exercise to the reader:
|
||||||
- Implement logic for the Louder call
|
- Implement logic for the Louder call
|
||||||
- code the logic inside the stub
|
- code the logic inside the stub
|
||||||
- now separate this logic into an unexported helper function
|
- now separate this logic into an unexported helper function
|
||||||
- Define a new RPC call in echo.proto
|
- Define a new RPC call in echo.proto
|
||||||
- regenerate service with truss, check that your old logic remains
|
- regenerate service with truss, check that your old logic remains
|
||||||
- implement the logic for your new call in a separate package, place it ouside of echo-service
|
- implement the logic for your new call in a separate package, place it ouside of echo-service
|
||||||
- wire in the new logic by importing the package in the server_handler.go
|
- wire in the new logic by importing the package in the `handlers.go`
|
||||||
Suggestion: Save everything the service hears and echo all of it back. See repeated types (protobuf), package variables and init() function (golang).
|
Suggestion: Save everything the service hears and echo all of it back. See repeated types (protobuf), package variables and init() function (golang).
|
||||||
- Remove an RPC call definition from echo.proto
|
- Remove an RPC call definition from echo.proto
|
||||||
- regenerate service with truss, verify that the call no longer exists
|
- regenerate service with truss, verify that the call no longer exists
|
||||||
|
@ -173,16 +175,16 @@ The following is left as an exersise to the reader:
|
||||||
|
|
||||||
You can control the location of the output folders for your service by specifying the following flags when running truss
|
You can control the location of the output folders for your service by specifying the following flags when running truss
|
||||||
```
|
```
|
||||||
-svcout {go-style-package-path to where you want the {Name}-service folder to be}
|
--svcout {go-style-package-path to where you want the contents of {Name}-service folder to be}
|
||||||
-pbout {go-style-package-path to where you want the *.pb.go interface definitions to be}
|
--pbout {go-style-package-path to where you want the *.pb.go interface definitions to be}
|
||||||
```
|
```
|
||||||
|
|
||||||
Note: “go-style-package-path” means exactly the style you use in your golang import statements, relative to your $GOPATH. This is not your system file path, nor it is relative to location of the *.proto file; the start of the path must be accessible from your $GOPATH. Also no “/” at the end.
|
Note: “go-style-package-path” means exactly the style you use in your golang import statements, relative to your $GOPATH. This is not your system file path, nor it is relative to location of the *.proto file; the start of the path must be accessible from your $GOPATH.
|
||||||
For example:
|
For example:
|
||||||
```
|
```
|
||||||
truss -pbout truss-demo/interface-defs -svcout truss-demo/service echo.proto
|
truss --pbout truss-demo/interface-defs --svcout truss-demo/service echo.proto
|
||||||
```
|
```
|
||||||
Executing this command will place the *.pb.go files into `$GOPATH/truss-demo/interface-defs/`, and the entire echo-service directory (excepting the *.pb.go files) to `$GOPATH/truss-demo/service/`.
|
Executing this command will place the *.pb.go files into `$GOPATH/truss-demo/interface-defs/`, and the entire echo-service contents (excepting the *.pb.go files) to `$GOPATH/truss-demo/service/`.
|
||||||
|
|
||||||
## Middlewares
|
## Middlewares
|
||||||
|
|
||||||
|
|
59
USAGE.md
59
USAGE.md
|
@ -1,66 +1,11 @@
|
||||||
# Using truss
|
# Using truss
|
||||||
|
|
||||||
## File structure
|
|
||||||
|
|
||||||
Start with your service definition file, let's name it `svc.proto`.
|
|
||||||
For a more detailed example of a simple service definition see [echo.proto](./_example/echo.proto),
|
|
||||||
but for now we only care about the following structure:
|
|
||||||
```
|
|
||||||
// The package name determines the name of the directories that truss creates
|
|
||||||
package NAME;
|
|
||||||
|
|
||||||
// RPC interface definitions
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|
||||||
The current directory should look like this:
|
|
||||||
|
|
||||||
```
|
|
||||||
.
|
|
||||||
└── svc.proto
|
|
||||||
```
|
|
||||||
|
|
||||||
Run truss on your service definition file: `truss svc.proto`.
|
|
||||||
Upon success, `NAME-service` folder will be created in your current directory.
|
|
||||||
(`NAME-service`, where NAME is the name of the package defined in your definition file.)
|
|
||||||
|
|
||||||
Your directory structure will look like this:
|
|
||||||
|
|
||||||
```
|
|
||||||
.
|
|
||||||
├── NAME-service
|
|
||||||
│ ├── docs
|
|
||||||
│ │ └── docs.md
|
|
||||||
│ ├── generated
|
|
||||||
│ │ └── ...
|
|
||||||
│ ├── handlers
|
|
||||||
│ │ └── server
|
|
||||||
│ │ └── server_handler.go
|
|
||||||
│ ├── middlewares
|
|
||||||
│ │ └── ...
|
|
||||||
│ ├── NAME-cli-client
|
|
||||||
│ │ └── client_main.go
|
|
||||||
│ ├── NAME-server
|
|
||||||
│ │ └── server_main.go
|
|
||||||
│ └── svc.pb.go
|
|
||||||
├── svc.proto
|
|
||||||
```
|
|
||||||
|
|
||||||
Now that you've generated your service, you can install the generated binaries
|
|
||||||
with `go install ./...` which will install `NAME-cli-client` and `NAME-server`,
|
|
||||||
where NAME is the name of the package defined in your definition file.
|
|
||||||
|
|
||||||
To add business logic, edit the `server_handler.go` file in `./NAME-service/handlers/server/`.
|
|
||||||
|
|
||||||
To add middlewares, edit ... (TODO)
|
|
||||||
|
|
||||||
## Our Contract
|
## Our Contract
|
||||||
|
|
||||||
1. Modify ONLY the files in `handlers/` and `middlewares/`.
|
1. Modify ONLY the files in `handlers/` and `middlewares/`.
|
||||||
|
|
||||||
User logic can be imported and executed within the functions in the handlers. It can also be added as _unexported_ helper functions in the handler file.
|
User logic can be imported and executed within the functions in the handlers. It can also be added as _unexported_ helper functions in the handler file.
|
||||||
|
|
||||||
Truss will enforce that exported functions in `server_handler.go` conform to the rpc interface defined in the service *.proto files. All other exported functions will be removed upon next re-run of truss.
|
Truss will enforce that exported functions in `handlers/handlers.go` conform to the rpc interface defined in the service *.proto files. All other exported functions will be removed upon next re-run of truss.
|
||||||
|
|
||||||
2. DO NOT create files or directories in `NAME-service/`
|
2. DO NOT create files or directories in `NAME-service/`
|
||||||
All user logic must exist outside of `NAME-service/`, leaving organization of that logic up to the user.
|
All user logic must exist outside of `NAME-service/`, leaving organization of that logic up to the user.
|
||||||
|
|
|
@ -29,18 +29,27 @@ func TestMain(m *testing.M) {
|
||||||
}
|
}
|
||||||
|
|
||||||
basePath = filepath.Join(wd, definitionDirectory)
|
basePath = filepath.Join(wd, definitionDirectory)
|
||||||
|
// Create a standalone copy of the 'basic' service binary that persists
|
||||||
|
// through all the tests. This binary to be used to test things like flags
|
||||||
|
// and flag-groups.
|
||||||
|
|
||||||
|
exitCode := 1
|
||||||
|
defer func() {
|
||||||
|
if exitCode == 0 {
|
||||||
|
cleanTests(basePath)
|
||||||
|
}
|
||||||
|
os.Exit(exitCode)
|
||||||
|
}()
|
||||||
|
|
||||||
clean := flag.Bool("clean", false, "Remove all generated test files and do nothing else")
|
clean := flag.Bool("clean", false, "Remove all generated test files and do nothing else")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
if *clean {
|
if *clean {
|
||||||
cleanTests(basePath)
|
exitCode = 0
|
||||||
os.Exit(0)
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a standalone copy of the 'basic' service binary that persists
|
// Cleanup so that cp works as expected
|
||||||
// through all the tests. This binary to be used to test things like flags
|
cleanTests(basePath)
|
||||||
// and flag-groups.
|
|
||||||
exitCode := 0
|
|
||||||
|
|
||||||
// Copy "1-basic" into a special "0-basic" which is removed
|
// Copy "1-basic" into a special "0-basic" which is removed
|
||||||
copy := exec.Command(
|
copy := exec.Command(
|
||||||
|
@ -54,7 +63,7 @@ func TestMain(m *testing.M) {
|
||||||
err = copy.Run()
|
err = copy.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("cannot copy '0-basic' service: %v", err)
|
fmt.Printf("cannot copy '0-basic' service: %v", err)
|
||||||
os.Exit(1)
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
path := filepath.Join(basePath, "0-basic")
|
path := filepath.Join(basePath, "0-basic")
|
||||||
|
@ -62,20 +71,15 @@ func TestMain(m *testing.M) {
|
||||||
err = createTrussService(path)
|
err = createTrussService(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("cannot create truss service: %v", err)
|
fmt.Printf("cannot create truss service: %v", err)
|
||||||
os.Exit(1)
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = buildTestService(filepath.Join(path, "test-service"))
|
err = buildTestService(filepath.Join(path, "test-service"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("cannot build truss service: %v", err)
|
fmt.Printf("cannot build truss service: %v", err)
|
||||||
os.Exit(1)
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
defer func() {
|
|
||||||
os.RemoveAll(filepath.Join(basePath, "0-basic"))
|
|
||||||
os.Exit(exitCode)
|
|
||||||
}()
|
|
||||||
|
|
||||||
exitCode = m.Run()
|
exitCode = m.Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,13 +214,9 @@ func testEndToEnd(defDir string, subcmd string, t *testing.T, trussOptions ...st
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
|
||||||
// If nothing failed, delete the generated files
|
|
||||||
removeTestFiles(path)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func createTrussService(path string, trussFlags ...string) error {
|
func createTrussService(path string, trussFlags ...string) error {
|
||||||
// Remove tests if they exists
|
|
||||||
removeTestFiles(path)
|
|
||||||
|
|
||||||
trussOut, err := truss(path, trussFlags...)
|
trussOut, err := truss(path, trussFlags...)
|
||||||
|
|
||||||
|
@ -275,14 +275,14 @@ func buildTestService(serviceDir string) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
const serverPath = "/test-server"
|
const serverPath = "cmd/test-server"
|
||||||
const clientPath = "/test-cli-client"
|
const clientPath = "cmd/test"
|
||||||
|
|
||||||
// Build server and client
|
// Build server and client
|
||||||
errChan := make(chan error)
|
errChan := make(chan error)
|
||||||
|
|
||||||
go goBuild("test-server", binDir, filepath.Join(relDir, serverPath), errChan)
|
go goBuild("test-server", binDir, filepath.Join(relDir, serverPath), errChan)
|
||||||
go goBuild("test-cli-client", binDir, filepath.Join(relDir, clientPath), errChan)
|
go goBuild("test", binDir, filepath.Join(relDir, clientPath), errChan)
|
||||||
|
|
||||||
err = <-errChan
|
err = <-errChan
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -399,7 +399,7 @@ func reapServer(server *exec.Cmd, errc chan error) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func runClient(path string, flags ...string) ([]byte, error) {
|
func runClient(path string, flags ...string) ([]byte, error) {
|
||||||
const relativeClientPath = "/bin/test-cli-client"
|
const relativeClientPath = "/bin/test"
|
||||||
|
|
||||||
client := exec.Command(
|
client := exec.Command(
|
||||||
path+relativeClientPath,
|
path+relativeClientPath,
|
||||||
|
@ -420,6 +420,8 @@ func fileExists(path string) bool {
|
||||||
|
|
||||||
// cleanTests removes all test files from all directories in servicesDir
|
// cleanTests removes all test files from all directories in servicesDir
|
||||||
func cleanTests(servicesDir string) {
|
func cleanTests(servicesDir string) {
|
||||||
|
// Remove the 0-basic used for non building tests
|
||||||
|
os.RemoveAll(filepath.Join(servicesDir, "0-basic"))
|
||||||
// Clean up the service directories in each test
|
// Clean up the service directories in each test
|
||||||
dirs, _ := ioutil.ReadDir(servicesDir)
|
dirs, _ := ioutil.ReadDir(servicesDir)
|
||||||
for _, d := range dirs {
|
for _, d := range dirs {
|
||||||
|
@ -434,9 +436,16 @@ func cleanTests(servicesDir string) {
|
||||||
// removeTestFiles removes all files created by running truss and building the
|
// removeTestFiles removes all files created by running truss and building the
|
||||||
// service from a single definition directory
|
// service from a single definition directory
|
||||||
func removeTestFiles(defDir string) {
|
func removeTestFiles(defDir string) {
|
||||||
|
// svcout dir
|
||||||
|
os.RemoveAll(filepath.Join(defDir, "tunelab"))
|
||||||
|
// service dir
|
||||||
os.RemoveAll(filepath.Join(defDir, "test-service"))
|
os.RemoveAll(filepath.Join(defDir, "test-service"))
|
||||||
|
// where the binaries are compiled to
|
||||||
os.RemoveAll(filepath.Join(defDir, "bin"))
|
os.RemoveAll(filepath.Join(defDir, "bin"))
|
||||||
|
// test pbout
|
||||||
os.RemoveAll(filepath.Join(defDir, "pbout"))
|
os.RemoveAll(filepath.Join(defDir, "pbout"))
|
||||||
|
// So that the directory exists for pbout
|
||||||
|
// TODO: Make pbout create the directory if it does not exist
|
||||||
os.MkdirAll(filepath.Join(defDir, "pbout"), 0777)
|
os.MkdirAll(filepath.Join(defDir, "pbout"), 0777)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"github.com/go-kit/kit/endpoint"
|
"github.com/go-kit/kit/endpoint"
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
|
|
||||||
svc "github.com/TuneLab/go-truss/cmd/_integration-tests/middlewares/middlewarestest-service/generated"
|
svc "github.com/TuneLab/go-truss/cmd/_integration-tests/middlewares/middlewarestest-service/svc"
|
||||||
)
|
)
|
||||||
|
|
||||||
// WrapEndpoints accepts the service's entire collection of endpoints, so that a
|
// WrapEndpoints accepts the service's entire collection of endpoints, so that a
|
||||||
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
pb "github.com/TuneLab/go-truss/cmd/_integration-tests/middlewares/middlewarestest-service"
|
pb "github.com/TuneLab/go-truss/cmd/_integration-tests/middlewares/middlewarestest-service"
|
||||||
svc "github.com/TuneLab/go-truss/cmd/_integration-tests/middlewares/middlewarestest-service/generated"
|
svc "github.com/TuneLab/go-truss/cmd/_integration-tests/middlewares/middlewarestest-service/svc"
|
||||||
handler "github.com/TuneLab/go-truss/cmd/_integration-tests/middlewares/middlewarestest-service/handlers/server"
|
handler "github.com/TuneLab/go-truss/cmd/_integration-tests/middlewares/middlewarestest-service/handlers/server"
|
||||||
"github.com/TuneLab/go-truss/cmd/_integration-tests/middlewares/middlewarestest-service/middlewares"
|
"github.com/TuneLab/go-truss/cmd/_integration-tests/middlewares/middlewarestest-service/middlewares"
|
||||||
)
|
)
|
||||||
|
|
|
@ -9,7 +9,7 @@ import (
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
|
|
||||||
pb "github.com/TuneLab/go-truss/cmd/_integration-tests/transport/transportpermutations-service"
|
pb "github.com/TuneLab/go-truss/cmd/_integration-tests/transport/transportpermutations-service"
|
||||||
grpcclient "github.com/TuneLab/go-truss/cmd/_integration-tests/transport/transportpermutations-service/generated/client/grpc"
|
grpcclient "github.com/TuneLab/go-truss/cmd/_integration-tests/transport/transportpermutations-service/svc/client/grpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
var grpcAddr string
|
var grpcAddr string
|
||||||
|
|
|
@ -15,7 +15,7 @@ import (
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
// This Service
|
// This Service
|
||||||
pb "github.com/TuneLab/go-truss/cmd/_integration-tests/transport/transportpermutations-service"
|
pb "github.com/TuneLab/go-truss/cmd/_integration-tests/transport/transportpermutations-service"
|
||||||
httpclient "github.com/TuneLab/go-truss/cmd/_integration-tests/transport/transportpermutations-service/generated/client/http"
|
httpclient "github.com/TuneLab/go-truss/cmd/_integration-tests/transport/transportpermutations-service/svc/client/http"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -15,7 +15,7 @@ import (
|
||||||
"github.com/go-kit/kit/log"
|
"github.com/go-kit/kit/log"
|
||||||
|
|
||||||
pb "github.com/TuneLab/go-truss/cmd/_integration-tests/transport/transportpermutations-service"
|
pb "github.com/TuneLab/go-truss/cmd/_integration-tests/transport/transportpermutations-service"
|
||||||
svc "github.com/TuneLab/go-truss/cmd/_integration-tests/transport/transportpermutations-service/generated"
|
svc "github.com/TuneLab/go-truss/cmd/_integration-tests/transport/transportpermutations-service/svc"
|
||||||
handler "github.com/TuneLab/go-truss/cmd/_integration-tests/transport/transportpermutations-service/handlers/server"
|
handler "github.com/TuneLab/go-truss/cmd/_integration-tests/transport/transportpermutations-service/handlers/server"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ func TestApplyTemplateFromPath(t *testing.T) {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
end, err := applyTemplateFromPath("generated/endpoints.gotemplate", te)
|
end, err := applyTemplateFromPath("svc/endpoints.gotemplate", te)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ import (
|
||||||
const ignoredFunc = "NewService"
|
const ignoredFunc = "NewService"
|
||||||
|
|
||||||
// ServerHadlerPath is the relative path to the server handler template file
|
// ServerHadlerPath is the relative path to the server handler template file
|
||||||
const ServerHandlerPath = "handlers/server/server_handler.gotemplate"
|
const ServerHandlerPath = "handlers/handlers.gotemplate"
|
||||||
|
|
||||||
// New returns a truss.Renderable capable of updating server handlers.
|
// New returns a truss.Renderable capable of updating server handlers.
|
||||||
// New should be passed the previous version of the server handler to parse.
|
// New should be passed the previous version of the server handler to parse.
|
||||||
|
|
|
@ -134,7 +134,7 @@ func TestApplyServerTempl(t *testing.T) {
|
||||||
gen, err := applyServerTempl(te)
|
gen, err := applyServerTempl(te)
|
||||||
genBytes, err := ioutil.ReadAll(gen)
|
genBytes, err := ioutil.ReadAll(gen)
|
||||||
expected := `
|
expected := `
|
||||||
package handler
|
package handlers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
|
@ -304,7 +304,7 @@ func TestPruneDecls(t *testing.T) {
|
||||||
m := newMethodMap(sd.Service.Methods)
|
m := newMethodMap(sd.Service.Methods)
|
||||||
|
|
||||||
prev := `
|
prev := `
|
||||||
package handler
|
package handlers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
|
|
|
@ -7,7 +7,7 @@ import (
|
||||||
"github.com/TuneLab/go-truss/gengokit"
|
"github.com/TuneLab/go-truss/gengokit"
|
||||||
)
|
)
|
||||||
|
|
||||||
const HookPath = "handlers/server/hooks.gotemplate"
|
const HookPath = "handlers/hooks.gotemplate"
|
||||||
|
|
||||||
// NewHook returns a new HookRender
|
// NewHook returns a new HookRender
|
||||||
func NewHook(prev io.Reader) gengokit.Renderable {
|
func NewHook(prev io.Reader) gengokit.Renderable {
|
||||||
|
|
|
@ -18,7 +18,7 @@ const serverMethsTempl = `
|
||||||
`
|
`
|
||||||
|
|
||||||
const serverTempl = `
|
const serverTempl = `
|
||||||
package handler
|
package handlers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
|
@ -49,7 +49,7 @@ type {{ToLower .Service.Name}}Service struct{}
|
||||||
{{- end}}
|
{{- end}}
|
||||||
`
|
`
|
||||||
const hookTempl = `
|
const hookTempl = `
|
||||||
package handler
|
package handlers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
|
@ -181,6 +181,10 @@ func RemoveBraces(val string) string {
|
||||||
var HTTPAssistFuncs = PathParamsTemplate + BuildParamMapTemplate + RemoveBracesTemplate
|
var HTTPAssistFuncs = PathParamsTemplate + BuildParamMapTemplate + RemoveBracesTemplate
|
||||||
|
|
||||||
var serverTemplate = `
|
var serverTemplate = `
|
||||||
|
// Code generated by truss.
|
||||||
|
// Rerunning truss will overwrite this file.
|
||||||
|
// DO NOT EDIT!
|
||||||
|
|
||||||
package svc
|
package svc
|
||||||
|
|
||||||
// This file provides server-side bindings for the HTTP transport.
|
// This file provides server-side bindings for the HTTP transport.
|
||||||
|
@ -329,6 +333,10 @@ func headersToContext(ctx context.Context, r *http.Request) context.Context {
|
||||||
`
|
`
|
||||||
|
|
||||||
var clientTemplate = `
|
var clientTemplate = `
|
||||||
|
// Code generated by truss.
|
||||||
|
// Rerunning truss will overwrite this file.
|
||||||
|
// DO NOT EDIT!
|
||||||
|
|
||||||
// Package http provides an HTTP client for the {{.Service.Name}} service.
|
// Package http provides an HTTP client for the {{.Service.Name}} service.
|
||||||
package http
|
package http
|
||||||
|
|
||||||
|
@ -343,7 +351,7 @@ import (
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
|
|
||||||
// This Service
|
// This Service
|
||||||
svc "{{.ImportPath -}} /generated"
|
svc "{{.ImportPath -}} /svc"
|
||||||
pb "{{.PBImportPath -}}"
|
pb "{{.PBImportPath -}}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ func TestNewEndpointMiddleware(t *testing.T) {
|
||||||
import (
|
import (
|
||||||
_ "github.com/go-kit/kit/endpoint"
|
_ "github.com/go-kit/kit/endpoint"
|
||||||
|
|
||||||
svc "github.com/TuneLab/go-truss/gengokit/general-service/generated"
|
svc "github.com/TuneLab/go-truss/gengokit/general-service/svc"
|
||||||
)
|
)
|
||||||
|
|
||||||
// WrapEndpoints accepts the service's entire collection of endpoints, so that a
|
// WrapEndpoints accepts the service's entire collection of endpoints, so that a
|
||||||
|
@ -152,7 +152,7 @@ func TestRenderPrevEndpoints(t *testing.T) {
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/go-kit/kit/endpoint"
|
"github.com/go-kit/kit/endpoint"
|
||||||
svc "github.com/TuneLab/go-truss/gengokit/general-service/generated"
|
svc "github.com/TuneLab/go-truss/gengokit/general-service/svc"
|
||||||
)
|
)
|
||||||
|
|
||||||
// WrapEndpoint will be called individually for all endpoints defined in
|
// WrapEndpoint will be called individually for all endpoints defined in
|
||||||
|
|
|
@ -6,7 +6,7 @@ package middlewares
|
||||||
import (
|
import (
|
||||||
_ "github.com/go-kit/kit/endpoint"
|
_ "github.com/go-kit/kit/endpoint"
|
||||||
|
|
||||||
svc "{{.ImportPath -}} /generated"
|
svc "{{.ImportPath -}} /svc"
|
||||||
)
|
)
|
||||||
|
|
||||||
// WrapEndpoints accepts the service's entire collection of endpoints, so that a
|
// WrapEndpoints accepts the service's entire collection of endpoints, so that a
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
// Code generated by truss.
|
||||||
|
// Rerunning truss will overwrite this file.
|
||||||
|
// DO NOT EDIT!
|
||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
@ -16,8 +20,8 @@ import (
|
||||||
"github.com/go-kit/kit/log"
|
"github.com/go-kit/kit/log"
|
||||||
|
|
||||||
// This Service
|
// This Service
|
||||||
handler "{{.ImportPath -}} /handlers/server"
|
handler "{{.ImportPath -}} /handlers"
|
||||||
svc "{{.ImportPath -}} /generated"
|
svc "{{.ImportPath -}} /svc"
|
||||||
pb "{{.PBImportPath -}}"
|
pb "{{.PBImportPath -}}"
|
||||||
middlewares "{{.ImportPath -}} /middlewares"
|
middlewares "{{.ImportPath -}} /middlewares"
|
||||||
)
|
)
|
|
@ -1,3 +1,7 @@
|
||||||
|
// Code generated by truss.
|
||||||
|
// Rerunning truss will overwrite this file.
|
||||||
|
// DO NOT EDIT!
|
||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
@ -15,9 +19,9 @@ import (
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
// This Service
|
// This Service
|
||||||
clientHandler "{{.ImportPath -}} /generated/cli/handlers"
|
clientHandler "{{.ImportPath -}} /svc/cli/handlers"
|
||||||
grpcclient "{{.ImportPath -}} /generated/client/grpc"
|
grpcclient "{{.ImportPath -}} /svc/client/grpc"
|
||||||
httpclient "{{.ImportPath -}} /generated/client/http"
|
httpclient "{{.ImportPath -}} /svc/client/http"
|
||||||
pb "{{.PBImportPath -}}"
|
pb "{{.PBImportPath -}}"
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
// Code generated by truss.
|
||||||
|
// Rerunning truss will overwrite this file.
|
||||||
|
// DO NOT EDIT!
|
||||||
|
|
||||||
package clienthandler
|
package clienthandler
|
||||||
|
|
||||||
import (
|
import (
|
|
@ -1,3 +1,7 @@
|
||||||
|
// Code generated by truss.
|
||||||
|
// Rerunning truss will overwrite this file.
|
||||||
|
// DO NOT EDIT!
|
||||||
|
|
||||||
// Package grpc provides a gRPC client for the {{.Service.Name}} service.
|
// Package grpc provides a gRPC client for the {{.Service.Name}} service.
|
||||||
package grpc
|
package grpc
|
||||||
|
|
||||||
|
@ -11,7 +15,7 @@ import (
|
||||||
grpctransport "github.com/go-kit/kit/transport/grpc"
|
grpctransport "github.com/go-kit/kit/transport/grpc"
|
||||||
|
|
||||||
// This Service
|
// This Service
|
||||||
svc "{{.ImportPath -}} /generated"
|
svc "{{.ImportPath -}} /svc"
|
||||||
pb "{{.PBImportPath -}}"
|
pb "{{.PBImportPath -}}"
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
// Code generated by truss.
|
||||||
|
// Rerunning truss will overwrite this file.
|
||||||
|
// DO NOT EDIT!
|
||||||
|
|
||||||
package svc
|
package svc
|
||||||
|
|
||||||
// This file contains methods to make individual endpoints from services,
|
// This file contains methods to make individual endpoints from services,
|
|
@ -1,3 +1,7 @@
|
||||||
|
// Code generated by truss.
|
||||||
|
// Rerunning truss will overwrite this file.
|
||||||
|
// DO NOT EDIT!
|
||||||
|
|
||||||
package svc
|
package svc
|
||||||
|
|
||||||
// This file provides server-side bindings for the gRPC transport.
|
// This file provides server-side bindings for the gRPC transport.
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Загрузка…
Ссылка в новой задаче