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