36 lines
518 B
Go
36 lines
518 B
Go
|
package erratum
|
||
|
|
||
|
const testVersion = 2
|
||
|
|
||
|
func Use(o ResourceOpener, inp string) (err error) {
|
||
|
var r Resource
|
||
|
moveOn := false
|
||
|
for !moveOn {
|
||
|
moveOn = true
|
||
|
if r, err = o(); err != nil {
|
||
|
switch err.(type) {
|
||
|
case TransientError:
|
||
|
moveOn = false
|
||
|
default:
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
defer r.Close()
|
||
|
defer func() {
|
||
|
if rec := recover(); rec != nil {
|
||
|
switch v := rec.(type) {
|
||
|
case FrobError:
|
||
|
r.Defrob(v.defrobTag)
|
||
|
err = v
|
||
|
case error:
|
||
|
err = v
|
||
|
}
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
r.Frob(inp)
|
||
|
|
||
|
return err
|
||
|
}
|