Files
wire/main.go

53 lines
1.0 KiB
Go
Raw Normal View History

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