Skip to content

Commit 11ba2dc

Browse files
authored
Merge pull request #1 from voluminor/new/marshal/byte
fully transferred universal methods to generators; added encoder/decoder to compressed []byte;
2 parents 5990921 + 9e72bf3 commit 11ba2dc

32 files changed

Lines changed: 1525 additions & 47 deletions

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ jobs:
8282
${{ env.RELEASE_COMMAND }}
8383
8484
git rm -f -r --cached --ignore-unmatch .github .idea _generate _run cli gen.go .gitignore
85-
git rm -f --cached --ignore-unmatch $(git ls-files '*.bin' '*.md' '*func_test.go')
85+
git rm -f --cached --ignore-unmatch $(git ls-files '*.bin' '*.md' '*_test.go')
8686
8787
git commit -m "release(${BUILD_VER}): strip heavy assets"
8888
git tag -a "${BUILD_VER}" -m "Release ${BUILD_VER}"

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ import (
6262
"fmt"
6363
"log"
6464
65-
"github.com/voluminor/lightweigit-loader/global"
65+
"github.com/voluminor/lightweigit-loader/target/global"
6666
)
6767
6868
func main() {
@@ -142,7 +142,7 @@ import (
142142
"fmt"
143143
"log"
144144
145-
"github.com/voluminor/lightweigit-loader/global"
145+
"github.com/voluminor/lightweigit-loader/target/global"
146146
)
147147
148148
func main() {
@@ -188,7 +188,7 @@ import (
188188
"log"
189189
190190
lightweigit "github.com/voluminor/lightweigit-loader"
191-
"github.com/voluminor/lightweigit-loader/global"
191+
"github.com/voluminor/lightweigit-loader/target/global"
192192
)
193193
194194
func main() {
@@ -255,7 +255,7 @@ import (
255255
"log"
256256
257257
lightweigit "github.com/voluminor/lightweigit-loader"
258-
"github.com/voluminor/lightweigit-loader/global"
258+
"github.com/voluminor/lightweigit-loader/target/global"
259259
)
260260
261261
func main() {
@@ -311,7 +311,7 @@ import (
311311
"net/http"
312312
"os"
313313
314-
"github.com/voluminor/lightweigit-loader/global"
314+
"github.com/voluminor/lightweigit-loader/target/global"
315315
)
316316
317317
func main() {

_generate/build_func/main.go

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
package main
2+
3+
import (
4+
_ "embed"
5+
"fmt"
6+
"log"
7+
"os"
8+
"path/filepath"
9+
"sort"
10+
"strings"
11+
"time"
12+
13+
dep "github.com/voluminor/lightweigit-loader/_generate"
14+
)
15+
16+
// // // // // // // // // //
17+
18+
const (
19+
packageName = "global"
20+
fileName = "func.go"
21+
22+
fTag = "func_tag.go"
23+
ptTag = "TagLatest() (lightweigit.ProviderTagInterface, error)"
24+
25+
fRelease = "func_release.go"
26+
ptRelease = "ReleaseLatest() (lightweigit.ProviderReleaseInterface, error)"
27+
)
28+
29+
//go:embed template.tmpl
30+
var template_text string
31+
32+
//
33+
34+
func fileExists(path string) bool {
35+
info, err := os.Stat(path)
36+
if err != nil {
37+
return false
38+
}
39+
return !info.IsDir()
40+
}
41+
42+
func fileContains(path, substr string) (bool, error) {
43+
b, err := os.ReadFile(path)
44+
if err != nil {
45+
return false, err
46+
}
47+
return strings.Contains(string(b), substr), nil
48+
}
49+
50+
func FindValidDirs(rootDir string) ([]string, error) {
51+
entries, err := os.ReadDir(rootDir)
52+
if err != nil {
53+
return nil, fmt.Errorf("dir %q: %w", rootDir, err)
54+
}
55+
56+
var result []string
57+
58+
for _, entry := range entries {
59+
if !entry.IsDir() {
60+
continue
61+
}
62+
63+
dirName := entry.Name()
64+
dirPath := filepath.Join(rootDir, dirName)
65+
66+
tagFile := filepath.Join(dirPath, fTag)
67+
releaseFile := filepath.Join(dirPath, fRelease)
68+
69+
if !fileExists(tagFile) || !fileExists(releaseFile) {
70+
continue
71+
}
72+
73+
okTag, err := fileContains(tagFile, ptTag)
74+
if err != nil {
75+
return nil, fmt.Errorf("read %q: %w", tagFile, err)
76+
}
77+
if !okTag {
78+
continue
79+
}
80+
81+
okRelease, err := fileContains(releaseFile, ptRelease)
82+
if err != nil {
83+
return nil, fmt.Errorf("read %q: %w", releaseFile, err)
84+
}
85+
if !okRelease {
86+
continue
87+
}
88+
89+
result = append(result, dirName)
90+
}
91+
92+
return result, nil
93+
}
94+
95+
type TemplateObj struct {
96+
GenerationTime string
97+
PackageName string
98+
Path string
99+
ImportsArr []string
100+
101+
Mods []string
102+
Dirs []string
103+
}
104+
105+
// //
106+
107+
func main() {
108+
109+
dirs, err := FindValidDirs(".")
110+
if err != nil {
111+
log.Fatal(err)
112+
}
113+
114+
sort.Strings(dirs)
115+
116+
// //
117+
118+
data := new(TemplateObj)
119+
data.GenerationTime = time.Now().Format(time.RFC3339)
120+
data.PackageName = packageName
121+
122+
data.ImportsArr = make([]string, 0)
123+
data.ImportsArr = append(data.ImportsArr, "errors")
124+
data.ImportsArr = append(data.ImportsArr, "github.com/voluminor/lightweigit-loader")
125+
126+
data.Dirs = dirs
127+
for _, dir := range dirs {
128+
data.ImportsArr = append(data.ImportsArr, "github.com/voluminor/lightweigit-loader/"+dir)
129+
}
130+
131+
os.MkdirAll(filepath.Join("target", packageName), 0777)
132+
err = dep.WriteFileFromTemplate(filepath.Join("target", packageName, fileName), template_text, data)
133+
if err != nil {
134+
log.Println("An error when trying to save a generated file:", err)
135+
}
136+
}

_generate/build_func/template.tmpl

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
// Code generated using '_generate/build_func'; DO NOT EDIT.
2+
// Generation time: {{.GenerationTime}}
3+
{{- if gt (len .Path) 3 }}
4+
// mod-path: {{ .Path }}
5+
{{- end }}
6+
7+
package {{.PackageName}}
8+
9+
{{- if gt (len .ImportsArr) 0 }}
10+
{{- if eq (len .ImportsArr) 1 }}
11+
{{- $imp := index .ImportsArr 0 }}
12+
{{- $parts := split $imp " " }}
13+
{{- if gt (len $parts) 1 }}
14+
import {{ index $parts 0 }} "{{ index $parts 1 }}"
15+
{{- else }}
16+
import "{{ index $parts 0 }}"
17+
{{- end }}
18+
{{- else }}
19+
import (
20+
{{- range .ImportsArr }}
21+
{{- $parts := split . " " }}
22+
{{- if gt (len $parts) 1 }}
23+
{{ index $parts 0 }} "{{ index $parts 1 }}"
24+
{{- else }}
25+
"{{ . }}"
26+
{{- end }}
27+
{{- end }}
28+
)
29+
{{- end }}
30+
{{- end }}
31+
32+
// // // // // // // //
33+
34+
func Parse(raw string) (lightweigit.ProviderInterface, error) {
35+
if raw == "" {
36+
return nil, errors.New("an empty URL string")
37+
}
38+
39+
{{- range $i, $dir := .Dirs }}
40+
41+
m{{$i}}, err := {{$dir}}.Parse(raw)
42+
if err == nil {
43+
return m{{$i}}, nil
44+
}
45+
{{- end }}
46+
47+
return nil, err
48+
}
49+
50+
51+
//
52+
53+
func UnmarshalTag(data []byte) (lightweigit.ProviderTagInterface, error) {
54+
if len(data) < 5 {
55+
return nil, errors.New("not enough data")
56+
}
57+
58+
{{- range $i, $dir := .Dirs }}
59+
60+
m{{$i}}, err := {{$dir}}.UnmarshalTag(data)
61+
if err == nil {
62+
return m{{$i}}, nil
63+
}
64+
{{- end }}
65+
66+
return nil, err
67+
}
68+
69+
func UnmarshalRelease(data []byte) (lightweigit.ProviderReleaseInterface, error) {
70+
if len(data) < 5 {
71+
return nil, errors.New("not enough data")
72+
}
73+
74+
{{- range $i, $dir := .Dirs }}
75+
76+
m{{$i}}, err := {{$dir}}.UnmarshalRelease(data)
77+
if err == nil {
78+
return m{{$i}}, nil
79+
}
80+
{{- end }}
81+
82+
return nil, err
83+
}

0 commit comments

Comments
 (0)