-
Notifications
You must be signed in to change notification settings - Fork 0
/
v1.go
93 lines (71 loc) · 1.98 KB
/
v1.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package objekte_format
import (
"bufio"
"io"
"github.com/friedenberg/zit/src/alfa/errors"
"github.com/friedenberg/zit/src/alfa/schnittstellen"
"github.com/friedenberg/zit/src/bravo/iter"
"github.com/friedenberg/zit/src/charlie/gattung"
"github.com/friedenberg/zit/src/delta/ohio"
"github.com/friedenberg/zit/src/echo/format"
"github.com/friedenberg/zit/src/echo/kennung"
)
type v1 struct{}
func (f v1) FormatPersistentMetadatei(
w1 io.Writer,
c FormatterContext,
o Options,
) (n int64, err error) {
m := c.GetMetadatei()
w := format.NewLineWriter()
if o.IncludeTai {
w.WriteFormat("Tai %s", m.Tai)
}
w.WriteFormat("%s %s", gattung.Akte, m.AkteSha)
w.WriteFormat("%s %s", gattung.Typ, m.GetTyp())
w.WriteFormat("%s %s", gattung.Bezeichnung, m.Bezeichnung)
for _, e := range iter.SortedValues[kennung.Etikett](m.GetEtiketten()) {
w.WriteFormat("%s %s", gattung.Etikett, e)
}
if n, err = w.WriteTo(w1); err != nil {
err = errors.Wrap(err)
return
}
return
}
func (f v1) ParsePersistentMetadatei(
r1 io.Reader,
c ParserContext,
_ Options,
) (n int64, err error) {
m := c.GetMetadatei()
etiketten := kennung.MakeEtikettMutableSet()
r := bufio.NewReader(r1)
typLineReader := m.Typ.Set
typLineReader = ohio.MakeLineReaderIgnoreErrors(typLineReader)
esa := iter.MakeFuncSetString[kennung.Etikett, *kennung.Etikett](
etiketten,
)
var g gattung.Gattung
lineReaders := ohio.MakeLineReaderIterate(
g.Set,
ohio.MakeLineReaderKeyValues(
map[string]schnittstellen.FuncSetString{
"Tai": m.Tai.Set,
gattung.Akte.String(): m.AkteSha.Set,
gattung.Typ.String(): typLineReader,
gattung.AkteTyp.String(): typLineReader,
gattung.Bezeichnung.String(): m.Bezeichnung.Set,
gattung.Etikett.String(): esa,
},
),
)
lr := format.MakeLineReaderConsumeEmpty(lineReaders)
if n, err = lr.ReadFrom(r); err != nil {
err = errors.Wrap(err)
return
}
m.SetEtiketten(etiketten)
c.SetMetadatei(m)
return
}