summaryrefslogtreecommitdiff
path: root/dict/serialize.go
diff options
context:
space:
mode:
Diffstat (limited to 'dict/serialize.go')
-rw-r--r--dict/serialize.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/dict/serialize.go b/dict/serialize.go
new file mode 100644
index 0000000..da97c06
--- /dev/null
+++ b/dict/serialize.go
@@ -0,0 +1,55 @@
+package dict
+
+import (
+ "bufio"
+ "io"
+ "strings"
+)
+
+func LoadDict[V any](r io.Reader, f func(l string) (string, V)) (*Dict[V], error) {
+ //var d *Dict[V]
+ //
+ //if l, err := linesNotEmpty(r); err != nil {
+ // return nil, err
+ //} else {
+ // d = NewDict[V](l)
+ //}
+
+ d := NewDict[V]()
+
+ scanner := bufio.NewScanner(r)
+
+ for scanner.Scan() {
+ line := scanner.Text()
+
+ if err := scanner.Err(); err != nil {
+ return nil, err
+ }
+
+ k, v := f(line)
+
+ d.Set(k, v)
+ }
+
+ return d, nil
+}
+
+func linesNotEmpty(r io.Reader) (int, error) {
+ scanner := bufio.NewScanner(r)
+
+ count := 0
+
+ for scanner.Scan() {
+ line := scanner.Text()
+
+ if strings.TrimSpace(line) != "" {
+ count++
+ }
+ }
+
+ if err := scanner.Err(); err != nil {
+ return 0, err
+ }
+
+ return count, nil
+}