forked from getgauge/gauge
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathformatter.go
54 lines (43 loc) · 1.37 KB
/
formatter.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
// Copyright 2015 ThoughtWorks, Inc.
// This file is part of Gauge.
// Gauge is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Gauge is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Gauge. If not, see <http://www.gnu.org/licenses/>.
package config
import (
"encoding/json"
"fmt"
"strings"
)
type formatter interface {
format([]property) (string, error)
}
type jsonFormatter struct {
}
func (f jsonFormatter) format(p []property) (string, error) {
bytes, err := json.MarshalIndent(p, "", "\t")
return string(bytes), err
}
type textFormatter struct {
}
func (f textFormatter) format(p []property) (string, error) {
format := "%-30s\t%-35s"
var s []string
max := 0
for _, v := range p {
text := fmt.Sprintf(format, v.Key, v.Value)
s = append(s, text)
if max < len(text) {
max = len(text)
}
}
s = append([]string{fmt.Sprintf(format, "Key", "Value"), strings.Repeat("-", max)}, s...)
return strings.Join(s, "\n"), nil
}