Mercurial > yakumo_izuru > aya
comparison vendor/github.com/yosssi/gcss/write.go @ 66:787b5ee0289d draft
Use vendored modules
Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author | yakumo.izuru |
---|---|
date | Sun, 23 Jul 2023 13:18:53 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
65:6d985efa0f7a | 66:787b5ee0289d |
---|---|
1 package gcss | |
2 | |
3 import ( | |
4 "bufio" | |
5 "io" | |
6 "os" | |
7 ) | |
8 | |
9 // writeFlusher is the interface that groups the basic Write and Flush methods. | |
10 type writeFlusher interface { | |
11 io.Writer | |
12 Flush() error | |
13 } | |
14 | |
15 var newBufWriter = func(w io.Writer) writeFlusher { | |
16 return bufio.NewWriter(w) | |
17 } | |
18 | |
19 // write writes the input byte data to the CSS file. | |
20 func write(path string, bc <-chan []byte, berrc <-chan error) (<-chan struct{}, <-chan error) { | |
21 done := make(chan struct{}) | |
22 errc := make(chan error) | |
23 | |
24 go func() { | |
25 f, err := os.Create(path) | |
26 | |
27 if err != nil { | |
28 errc <- err | |
29 return | |
30 } | |
31 | |
32 defer f.Close() | |
33 | |
34 w := newBufWriter(f) | |
35 | |
36 for { | |
37 select { | |
38 case b, ok := <-bc: | |
39 if !ok { | |
40 if err := w.Flush(); err != nil { | |
41 errc <- err | |
42 return | |
43 } | |
44 | |
45 done <- struct{}{} | |
46 | |
47 return | |
48 } | |
49 | |
50 if _, err := w.Write(b); err != nil { | |
51 errc <- err | |
52 return | |
53 } | |
54 case err := <-berrc: | |
55 errc <- err | |
56 return | |
57 } | |
58 } | |
59 }() | |
60 | |
61 return done, errc | |
62 } |