Files
wire/internal/goose/testdata/PartialCleanup/foo/foo.go
Ross Light ccf63fec5d goose: support provider cleanup functions
Documented and updated appropriate providers to reflect.

Reviewed-by: Tuo Shan <shantuo@google.com>
2018-11-12 14:09:56 -08:00

52 lines
805 B
Go

package main
import (
"errors"
"fmt"
"strings"
)
var (
cleanedFoo = false
cleanedBar = false
)
func main() {
_, cleanup, err := injectBaz()
if err == nil {
fmt.Println("<nil>")
} else {
fmt.Println(strings.Contains(err.Error(), "bork!"))
}
fmt.Println(cleanedFoo, cleanedBar, cleanup == nil)
}
type Foo int
type Bar int
type Baz int
//goose:provide Foo
func provideFoo() (*Foo, func()) {
foo := new(Foo)
*foo = 42
return foo, func() { *foo = 0; cleanedFoo = true }
}
//goose:provide Bar
func provideBar(foo *Foo) (*Bar, func(), error) {
bar := new(Bar)
*bar = 77
return bar, func() {
if *foo == 0 {
panic("foo cleaned up before bar")
}
*bar = 0
cleanedBar = true
}, nil
}
//goose:provide Baz
func provideBaz(bar *Bar) (Baz, error) {
return 0, errors.New("bork!")
}