Files
QSfera/Server/vendor/github.com/open-policy-agent/opa/v1/topdown/sink.go
T
Курнат Андрей 2315f25754 Initial QSfera import
2026-06-07 10:20:04 +03:00

74 lines
1.1 KiB
Go

package topdown
import (
"bytes"
"io"
)
var _ io.Writer = (*sinkW)(nil)
type sinkWriter interface {
io.Writer
String() string
Grow(int)
WriteByte(byte) error
WriteString(string) (int, error)
}
type sinkW struct {
buf *bytes.Buffer
cancel Cancel
err error
}
func newSink(name string, hint int, c Cancel) sinkWriter {
b := &bytes.Buffer{}
if hint > 0 {
b.Grow(hint)
}
if c == nil {
return b
}
return &sinkW{
cancel: c,
buf: b,
err: Halt{
Err: &Error{
Code: CancelErr,
Message: name + ": timed out before finishing",
},
},
}
}
func (sw *sinkW) Grow(n int) {
sw.buf.Grow(n)
}
func (sw *sinkW) Write(bs []byte) (int, error) {
if sw.cancel.Cancelled() {
return 0, sw.err
}
return sw.buf.Write(bs)
}
func (sw *sinkW) WriteByte(b byte) error {
if sw.cancel.Cancelled() {
return sw.err
}
return sw.buf.WriteByte(b)
}
func (sw *sinkW) WriteString(s string) (int, error) {
if sw.cancel.Cancelled() {
return 0, sw.err
}
return sw.buf.WriteString(s)
}
func (sw *sinkW) String() string {
return sw.buf.String()
}