goose: support provider cleanup functions

Documented and updated appropriate providers to reflect.

Reviewed-by: Tuo Shan <shantuo@google.com>
This commit is contained in:
Ross Light
2018-04-03 13:13:15 -07:00
parent 1380f96c06
commit ccf63fec5d
12 changed files with 213 additions and 13 deletions

View File

@@ -0,0 +1,51 @@
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!")
}