]> git.lizzy.rs Git - micro.git/blob - runtime/syntax/make_headers.go
4717a32b1445cc5ce29944631dd3da4bdd8b7dff
[micro.git] / runtime / syntax / make_headers.go
1 package main
2
3 import (
4         "bytes"
5         "fmt"
6         "io/ioutil"
7         "os"
8         "strings"
9         "time"
10
11         yaml "gopkg.in/yaml.v2"
12 )
13
14 type HeaderYaml struct {
15         FileType string `yaml:"filetype"`
16         Detect   struct {
17                 FNameRgx  string `yaml:"filename"`
18                 HeaderRgx string `yaml:"header"`
19         } `yaml:"detect"`
20 }
21
22 type Header struct {
23         FileType  string
24         FNameRgx  string
25         HeaderRgx string
26 }
27
28 func main() {
29         if len(os.Args) > 1 {
30                 os.Chdir(os.Args[1])
31         }
32         files, _ := ioutil.ReadDir(".")
33         for _, f := range files {
34                 fname := f.Name()
35                 if strings.HasSuffix(fname, ".yaml") {
36                         convert(fname[:len(fname)-5])
37                 }
38         }
39 }
40
41 func convert(name string) {
42         filename := name + ".yaml"
43         var hdr HeaderYaml
44         source, err := ioutil.ReadFile(filename)
45         if err != nil {
46                 panic(err)
47         }
48         err = yaml.Unmarshal(source, &hdr)
49         if err != nil {
50                 panic(err)
51         }
52         encode(name, hdr)
53 }
54
55 func encode(name string, c HeaderYaml) {
56         f, _ := os.Create(name + ".hdr")
57         f.WriteString(c.FileType + "\n")
58         f.WriteString(c.Detect.FNameRgx + "\n")
59         f.WriteString(c.Detect.HeaderRgx + "\n")
60         f.Close()
61 }
62
63 func decode(name string) Header {
64         start := time.Now()
65         data, _ := ioutil.ReadFile(name + ".hdr")
66         strs := bytes.Split(data, []byte{'\n'})
67         var hdr Header
68         hdr.FileType = string(strs[0])
69         hdr.FNameRgx = string(strs[1])
70         hdr.HeaderRgx = string(strs[2])
71         fmt.Printf("took %v\n", time.Since(start))
72
73         return hdr
74 }