goose: dependency injection proof of concept
See documentation and demo for usage and known limitations. Reviewed-by: Herbie Ong <herbie@google.com>
This commit is contained in:
52
main.go
Normal file
52
main.go
Normal file
@@ -0,0 +1,52 @@
|
||||
// goose is a compile-time dependency injection tool.
|
||||
//
|
||||
// See README.md for an overview.
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"go/build"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"codename/goose/internal/goose"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var pkg string
|
||||
switch len(os.Args) {
|
||||
case 1:
|
||||
pkg = "."
|
||||
case 2:
|
||||
pkg = os.Args[1]
|
||||
default:
|
||||
fmt.Fprintln(os.Stderr, "goose: usage: goose [PKG]")
|
||||
os.Exit(64)
|
||||
}
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "goose:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
pkgInfo, err := build.Default.Import(pkg, wd, build.FindOnly)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "goose:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
out, err := goose.Generate(&build.Default, wd, pkg)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "goose:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
if len(out) == 0 {
|
||||
// No Goose directives, don't write anything.
|
||||
fmt.Fprintln(os.Stderr, "goose: no injector found for", pkg)
|
||||
return
|
||||
}
|
||||
p := filepath.Join(pkgInfo.Dir, "goose_gen.go")
|
||||
if err := ioutil.WriteFile(p, out, 0666); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "goose:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user