github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/iox/temp.go (about) 1 package iox 2 3 import ( 4 "io/ioutil" 5 "os" 6 ) 7 8 // WriteTempFile writes the content to a temporary file. 9 func WriteTempFile(fns ...WriteTempFileOptionFn) *WriteTempFileResult { 10 o := &WriteTempFileOption{} 11 for _, fn := range fns { 12 fn(o) 13 } 14 if o.TempDir == "" { 15 o.TempDir = os.TempDir() 16 } 17 18 r := o.writeTempFile() 19 if r.Err != nil && o.PanicOnError { 20 panic(r.Err) 21 } 22 23 return r 24 } 25 26 type WriteTempFileResult struct { 27 Name string 28 Err error 29 } 30 31 type WriteTempFileOption struct { 32 Content []byte 33 TempDir string 34 Pattern string 35 PanicOnError bool 36 } 37 38 func (o WriteTempFileOption) writeTempFile() *WriteTempFileResult { 39 r := &WriteTempFileResult{} 40 f, err := ioutil.TempFile(o.TempDir, o.Pattern) 41 if err != nil { 42 r.Err = err 43 return r 44 } 45 46 if _, err := f.Write(o.Content); err != nil { 47 r.Err = err 48 return r 49 } 50 51 if err := f.Close(); err != nil { 52 r.Err = err 53 return r 54 } 55 56 r.Name = f.Name() 57 return r 58 } 59 60 type WriteTempFileOptionFn func(*WriteTempFileOption) 61 62 func PanicOnError(c bool) WriteTempFileOptionFn { 63 return func(o *WriteTempFileOption) { 64 o.PanicOnError = c 65 } 66 } 67 68 func WithTempPattern(c string) WriteTempFileOptionFn { 69 return func(o *WriteTempFileOption) { 70 o.Pattern = c 71 } 72 } 73 74 func WithTempDir(c string) WriteTempFileOptionFn { 75 return func(o *WriteTempFileOption) { 76 o.TempDir = c 77 } 78 } 79 80 func WithTempString(c string) WriteTempFileOptionFn { 81 return func(o *WriteTempFileOption) { 82 o.Content = []byte(c) 83 } 84 } 85 86 func WithTempContent(c []byte) WriteTempFileOptionFn { 87 return func(o *WriteTempFileOption) { 88 o.Content = c 89 } 90 }