29 lines
619 B
Go
29 lines
619 B
Go
|
package uio
|
||
|
|
||
|
import "io"
|
||
|
|
||
|
// Cycler stores any io.Closer. When the value is replaced, the old value is
|
||
|
// closed.
|
||
|
type Cycler struct {
|
||
|
value io.Closer
|
||
|
}
|
||
|
|
||
|
// Value returns the value of the Cycler. If there is no value, nil is returned.
|
||
|
func (this *Cycler) Value () io.Closer {
|
||
|
return this.value
|
||
|
}
|
||
|
|
||
|
// Set replaces the value of the Cycler, closing the previous one if it exists.
|
||
|
func (this *Cycler) Set (value io.Closer) error {
|
||
|
err := this.value.Close()
|
||
|
this.value = value
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Close closes the Cycler's value early. It will be set to nil.
|
||
|
func (this *Cycler) Close () error {
|
||
|
return this.Set(nil)
|
||
|
}
|
||
|
|
||
|
|