Vendor main dependencies.
This commit is contained in:
parent
49a09ab7dd
commit
dd5e3fba01
2738 changed files with 1045689 additions and 0 deletions
58
vendor/github.com/donovanhide/eventsource/encoder.go
generated
vendored
Normal file
58
vendor/github.com/donovanhide/eventsource/encoder.go
generated
vendored
Normal file
|
@ -0,0 +1,58 @@
|
|||
package eventsource
|
||||
|
||||
import (
|
||||
"compress/gzip"
|
||||
"fmt"
|
||||
"io"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
encFields = []struct {
|
||||
prefix string
|
||||
value func(Event) string
|
||||
}{
|
||||
{"id: ", Event.Id},
|
||||
{"event: ", Event.Event},
|
||||
{"data: ", Event.Data},
|
||||
}
|
||||
)
|
||||
|
||||
// An Encoder is capable of writing Events to a stream. Optionally
|
||||
// Events can be gzip compressed in this process.
|
||||
type Encoder struct {
|
||||
w io.Writer
|
||||
compressed bool
|
||||
}
|
||||
|
||||
// NewEncoder returns an Encoder for a given io.Writer.
|
||||
// When compressed is set to true, a gzip writer will be
|
||||
// created.
|
||||
func NewEncoder(w io.Writer, compressed bool) *Encoder {
|
||||
if compressed {
|
||||
return &Encoder{w: gzip.NewWriter(w), compressed: true}
|
||||
}
|
||||
return &Encoder{w: w}
|
||||
}
|
||||
|
||||
// Encode writes an event in the format specified by the
|
||||
// server-sent events protocol.
|
||||
func (enc *Encoder) Encode(ev Event) error {
|
||||
for _, field := range encFields {
|
||||
prefix, value := field.prefix, field.value(ev)
|
||||
if len(value) == 0 {
|
||||
continue
|
||||
}
|
||||
value = strings.Replace(value, "\n", "\n"+prefix, -1)
|
||||
if _, err := io.WriteString(enc.w, prefix+value+"\n"); err != nil {
|
||||
return fmt.Errorf("eventsource encode: %v", err)
|
||||
}
|
||||
}
|
||||
if _, err := io.WriteString(enc.w, "\n"); err != nil {
|
||||
return fmt.Errorf("eventsource encode: %v", err)
|
||||
}
|
||||
if enc.compressed {
|
||||
return enc.w.(*gzip.Writer).Flush()
|
||||
}
|
||||
return nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue