Changeset 424 in code for trunk/config/config.go
- Timestamp:
- Oct 25, 2020, 5:10:50 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/config/config.go
r371 r424 2 2 3 3 import ( 4 "bufio"5 4 "fmt" 6 "io"7 5 "net" 8 6 "os" 9 7 10 "git hub.com/google/shlex"8 "git.sr.ht/~emersion/go-scfg" 11 9 ) 12 10 … … 63 61 64 62 func Load(path string) (*Server, error) { 65 f, err := os.Open(path)63 cfg, err := scfg.Load(path) 66 64 if err != nil { 67 65 return nil, err 68 66 } 69 defer f.Close() 70 71 return Parse(f) 67 return parse(cfg) 72 68 } 73 69 74 func Parse(r io.Reader) (*Server, error) { 75 scanner := bufio.NewScanner(r) 76 77 var directives []directive 78 for scanner.Scan() { 79 words, err := shlex.Split(scanner.Text()) 80 if err != nil { 81 return nil, fmt.Errorf("failed to parse config file: %v", err) 82 } else if len(words) == 0 { 83 continue 84 } 85 86 name, params := words[0], words[1:] 87 directives = append(directives, directive{name, params}) 88 } 89 if err := scanner.Err(); err != nil { 90 return nil, fmt.Errorf("failed to read config file: %v", err) 91 } 92 70 func parse(cfg scfg.Block) (*Server, error) { 93 71 srv := Defaults() 94 for _, d := range directives{72 for _, d := range cfg { 95 73 switch d.Name { 96 74 case "listen": 97 75 var uri string 98 if err := d. parseParams(&uri); err != nil {76 if err := d.ParseParams(&uri); err != nil { 99 77 return nil, err 100 78 } 101 79 srv.Listen = append(srv.Listen, uri) 102 80 case "hostname": 103 if err := d. parseParams(&srv.Hostname); err != nil {81 if err := d.ParseParams(&srv.Hostname); err != nil { 104 82 return nil, err 105 83 } 106 84 case "tls": 107 85 tls := &TLS{} 108 if err := d. parseParams(&tls.CertPath, &tls.KeyPath); err != nil {86 if err := d.ParseParams(&tls.CertPath, &tls.KeyPath); err != nil { 109 87 return nil, err 110 88 } 111 89 srv.TLS = tls 112 90 case "sql": 113 if err := d. parseParams(&srv.SQLDriver, &srv.SQLSource); err != nil {91 if err := d.ParseParams(&srv.SQLDriver, &srv.SQLSource); err != nil { 114 92 return nil, err 115 93 } 116 94 case "log": 117 if err := d. parseParams(&srv.LogPath); err != nil {95 if err := d.ParseParams(&srv.LogPath); err != nil { 118 96 return nil, err 119 97 } … … 136 114 return srv, nil 137 115 } 138 139 type directive struct {140 Name string141 Params []string142 }143 144 func (d *directive) parseParams(out ...*string) error {145 if len(d.Params) != len(out) {146 return fmt.Errorf("directive %q has wrong number of parameters: expected %v, got %v", d.Name, len(out), len(d.Params))147 }148 for i := range out {149 *out[i] = d.Params[i]150 }151 return nil152 }
Note:
See TracChangeset
for help on using the changeset viewer.