55 lines
1.0 KiB
Go
55 lines
1.0 KiB
Go
package unpack
|
|
|
|
import (
|
|
"github.com/urlesistiana/v2dat/mlog"
|
|
"github.com/urlesistiana/v2dat/v2data"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
var logger = mlog.L()
|
|
|
|
func splitAttrs(s string) (string, map[string]struct{}) {
|
|
tag, attrs, ok := strings.Cut(s, "@")
|
|
if ok {
|
|
m := make(map[string]struct{})
|
|
for _, attr := range strings.Split(attrs, "@") {
|
|
m[attr] = struct{}{}
|
|
}
|
|
return tag, m
|
|
}
|
|
return s, nil
|
|
}
|
|
|
|
// filterAttrs filter entries that do not have any of given attrs.
|
|
// If no attr was given, filterAttrs returns in.
|
|
func filterAttrs(in []*v2data.Domain, attrs map[string]struct{}) []*v2data.Domain {
|
|
if len(attrs) == 0 {
|
|
return in
|
|
}
|
|
out := make([]*v2data.Domain, 0)
|
|
for _, d := range in {
|
|
hasAttr := false
|
|
for _, attr := range d.Attribute {
|
|
if _, ok := attrs[attr.Key]; ok {
|
|
hasAttr = true
|
|
break
|
|
}
|
|
}
|
|
if !hasAttr {
|
|
continue
|
|
}
|
|
out = append(out, d)
|
|
}
|
|
return out
|
|
}
|
|
|
|
func fileName(f string) string {
|
|
f = filepath.Base(f)
|
|
if i := strings.LastIndexByte(f, '.'); i == -1 {
|
|
return f
|
|
} else {
|
|
return f[:i]
|
|
}
|
|
}
|