annotate vendor/github.com/yosssi/gcss/write.go @ 67:4edfa07d5fe0 draft

bfchroma turned out to be a hassle Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Thu, 07 Sep 2023 16:52:43 +0000
parents 787b5ee0289d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
66
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1 package gcss
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
2
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
3 import (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
4 "bufio"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5 "io"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6 "os"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9 // writeFlusher is the interface that groups the basic Write and Flush methods.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 type writeFlusher interface {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11 io.Writer
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12 Flush() error
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15 var newBufWriter = func(w io.Writer) writeFlusher {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16 return bufio.NewWriter(w)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19 // write writes the input byte data to the CSS file.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20 func write(path string, bc <-chan []byte, berrc <-chan error) (<-chan struct{}, <-chan error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21 done := make(chan struct{})
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22 errc := make(chan error)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24 go func() {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 f, err := os.Create(path)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28 errc <- err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
29 return
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
30 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
31
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32 defer f.Close()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34 w := newBufWriter(f)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
36 for {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
37 select {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
38 case b, ok := <-bc:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
39 if !ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
40 if err := w.Flush(); err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
41 errc <- err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
42 return
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
43 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
44
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
45 done <- struct{}{}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
46
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
47 return
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
48 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
49
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
50 if _, err := w.Write(b); err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
51 errc <- err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
52 return
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
53 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
54 case err := <-berrc:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
55 errc <- err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
56 return
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
57 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
58 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
59 }()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
60
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
61 return done, errc
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
62 }