code.pfad.fr/gohmekit@v0.2.1/cmd/generate/main.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "log" 6 "os" 7 "regexp" 8 "strings" 9 ) 10 11 func main() { 12 if err := run(); err != nil { 13 log.Fatal(err) 14 } 15 } 16 17 func run() error { 18 m, err := parseMetadata("hapip/metadata.json") 19 if err != nil { 20 return err 21 } 22 23 // fmt.Println(c) 24 if err := writeCharacteristic(m.Characteristics); err != nil { 25 return err 26 } 27 if err := writeService(m); err != nil { 28 return err 29 } 30 if err := writeCategories(m.Categories); err != nil { 31 return err 32 } 33 34 return nil 35 } 36 37 func parseMetadata(path string) (Metadata, error) { 38 r, err := os.Open(path) 39 if err != nil { 40 return Metadata{}, err 41 } 42 defer r.Close() 43 44 var m Metadata 45 return m, json.NewDecoder(r).Decode(&m) 46 } 47 48 var specialChars = regexp.MustCompile(`[^0-9a-zA-Z_ ]`) 49 50 func clean(s string) string { 51 underscored := strings.ReplaceAll(strings.TrimSpace(s), ".", "") 52 return specialChars.ReplaceAllString(underscored, "") 53 } 54 55 func camelCase(s string) string { 56 s = clean(s) 57 s = titleCase(s) 58 return strings.ReplaceAll(s, " ", "") 59 } 60 61 func titleCase(s string) string { 62 previousIsSpace := false 63 var result string 64 for _, r := range s { 65 if previousIsSpace { 66 result += strings.ToUpper(string(r)) 67 } else { 68 result += string(r) 69 } 70 previousIsSpace = r == ' ' 71 } 72 return result 73 } 74 75 var appleShort = regexp.MustCompile(`^0*([1-9A-F][0-9A-F]*)-0000-1000-8000-0026BB765291$`) 76 77 func shortUUID(s string) string { 78 matches := appleShort.FindStringSubmatch(s) 79 if len(matches) > 1 { 80 return matches[1] 81 } 82 return s 83 }