-
Notifications
You must be signed in to change notification settings - Fork 2
/
write.go
60 lines (54 loc) · 1.46 KB
/
write.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
//-----------------------------------------------------------------------------
// Copyright (c) 2020-present Detlef Stern
//
// This file is part of Zettelstore.
//
// Zettelstore is licensed under the latest version of the EUPL (European Union
// Public License). Please see file LICENSE.txt for your rights and obligations
// under this license.
//
// SPDX-License-Identifier: EUPL-1.2
// SPDX-FileCopyrightText: 2020-present Detlef Stern
//-----------------------------------------------------------------------------
package meta
import "io"
// Write writes metadata to a writer, excluding computed and propery values.
func (m *Meta) Write(w io.Writer) (int, error) {
return m.doWrite(w, IsComputed)
}
// WriteComputed writes metadata to a writer, including computed values,
// but excluding property values.
func (m *Meta) WriteComputed(w io.Writer) (int, error) {
return m.doWrite(w, IsProperty)
}
func (m *Meta) doWrite(w io.Writer, ignoreKeyPred func(string) bool) (length int, err error) {
for _, p := range m.ComputedPairs() {
key := p.Key
if ignoreKeyPred(key) {
continue
}
if err != nil {
break
}
var l int
l, err = io.WriteString(w, key)
length += l
if err == nil {
l, err = w.Write(colonSpace)
length += l
}
if err == nil {
l, err = io.WriteString(w, p.Value)
length += l
}
if err == nil {
l, err = w.Write(newline)
length += l
}
}
return length, err
}
var (
colonSpace = []byte{':', ' '}
newline = []byte{'\n'}
)