ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/aya/vendor/github.com/yosssi/gcss/write.go
Revision: 1.1
Committed: Mon Sep 30 00:42:06 2024 UTC (6 weeks, 4 days ago) by yakumo_izuru
Branch: MAIN
CVS Tags: HEAD
Log Message:
Mirrored from https://git.chaotic.ninja/git/yakumo_izuru/aya

File Contents

# User Rev Content
1 yakumo_izuru 1.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     }