/
language_template.go
77 lines (61 loc) · 1.79 KB
/
language_template.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// Copyright (c) Alex Ellis 2017. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
package stack
import (
"fmt"
"net/url"
"os"
"strings"
yaml "gopkg.in/yaml.v3"
)
func ParseYAMLForLanguageTemplate(file string) (*LanguageTemplate, error) {
var err error
var fileData []byte
urlParsed, err := url.Parse(file)
if err == nil && len(urlParsed.Scheme) > 0 {
fmt.Println("Parsed: " + urlParsed.String())
fileData, err = fetchYAML(urlParsed)
if err != nil {
return nil, err
}
} else {
fileData, err = os.ReadFile(file)
if err != nil {
return nil, err
}
}
return ParseYAMLDataForLanguageTemplate(fileData)
}
// ParseYAMLDataForLanguageTemplate parses YAML data into language template
func ParseYAMLDataForLanguageTemplate(fileData []byte) (*LanguageTemplate, error) {
var langTemplate LanguageTemplate
var err error
err = yaml.Unmarshal(fileData, &langTemplate)
if err != nil {
fmt.Printf("Error with YAML file\n")
return nil, err
}
return &langTemplate, err
}
func IsValidTemplate(lang string) bool {
var found bool
lang = strings.ToLower(lang)
if _, err := os.Stat("./template/" + lang); err == nil {
templateYAMLPath := "./template/" + lang + "/template.yml"
if _, err := ParseYAMLForLanguageTemplate(templateYAMLPath); err == nil {
found = true
}
}
return found
}
// LoadLanguageTemplate loads language template details from template.yml file.
func LoadLanguageTemplate(lang string) (*LanguageTemplate, error) {
lang = strings.ToLower(lang)
_, err := os.Stat("./template/" + lang)
if err == nil {
templateYAMLPath := "./template/" + lang + "/template.yml"
languageTemplate, err := ParseYAMLForLanguageTemplate(templateYAMLPath)
return languageTemplate, err
}
return nil, err
}