Skip to content

Commit e836462

Browse files
committed
feat: added ContentSeparator and MultilineSeparator structs
1 parent 430ce0a commit e836462

File tree

2 files changed

+106
-54
lines changed

2 files changed

+106
-54
lines changed

logger.go

Lines changed: 25 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@ type (
2222
}
2323

2424
LogMessageFormat struct {
25-
StatusSeparator gologgerstrings.Separator
26-
DetailsOuterSeparator gologgerstrings.Separator
27-
DetailsInnerSeparator gologgerstrings.Separator
25+
StatusSeparator *gologgerstrings.ContentSeparator
26+
DetailsSeparator *gologgerstrings.MultilineSeparator
2827
}
2928

3029
// LogError struct
@@ -35,9 +34,8 @@ type (
3534
}
3635

3736
LogErrorFormat struct {
38-
StatusSeparator gologgerstrings.Separator
39-
ErrorsOuterSeparator gologgerstrings.Separator
40-
ErrorsInnerSeparator gologgerstrings.Separator
37+
StatusSeparator *gologgerstrings.ContentSeparator
38+
ErrorsSeparator *gologgerstrings.MultilineSeparator
4139
}
4240

4341
// Logger is an interface for logging messages
@@ -48,7 +46,7 @@ type (
4846

4947
// LoggerFormat struct
5048
LoggerFormat struct {
51-
NameSeparator gologgerstrings.Separator
49+
NameSeparator *gologgerstrings.ContentSeparator
5250
MessageSeparator gologgerstrings.Separator
5351
}
5452

@@ -62,67 +60,63 @@ type (
6260

6361
// DefaultLogMessageFormat is the default log message format
6462
var DefaultLogMessageFormat = LogMessageFormat{
65-
StatusSeparator: gologgerstrings.SpaceSeparator,
66-
DetailsOuterSeparator: gologgerstrings.NewLineSeparator,
67-
DetailsInnerSeparator: gologgerstrings.TabSeparator,
63+
StatusSeparator: gologgerstrings.NewRepeatedContentSeparator(gologgerstrings.SpaceSeparator),
64+
DetailsSeparator: gologgerstrings.NewMultilineSeparator(gologgerstrings.NewLineSeparator, 1),
6865
}
6966

7067
// DefaultLogErrorFormat is the default log error format
7168
var DefaultLogErrorFormat = LogErrorFormat{
72-
StatusSeparator: gologgerstrings.SpaceSeparator,
73-
ErrorsOuterSeparator: gologgerstrings.NewLineSeparator,
74-
ErrorsInnerSeparator: gologgerstrings.TabSeparator,
69+
StatusSeparator: gologgerstrings.NewRepeatedContentSeparator(gologgerstrings.SpaceSeparator),
70+
ErrorsSeparator: gologgerstrings.NewMultilineSeparator(gologgerstrings.NewLineSeparator, 1),
7571
}
7672

7773
// DefaultLoggerFormat is the default logger format
7874
var DefaultLoggerFormat = LoggerFormat{
79-
NameSeparator: gologgerstrings.SpaceSeparator,
75+
NameSeparator: gologgerstrings.NewRepeatedContentSeparator(gologgerstrings.SpaceSeparator),
8076
MessageSeparator: gologgerstrings.SpaceSeparator,
8177
}
8278

8379
// NewLogMessageFormat creates a new log message format
8480
func NewLogMessageFormat(
85-
statusSeparator, detailsOuterSeparator, detailsInnerSeparator gologgerstrings.Separator,
81+
statusSeparator *gologgerstrings.ContentSeparator,
82+
detailsSeparator *gologgerstrings.MultilineSeparator,
8683
) *LogMessageFormat {
8784
return &LogMessageFormat{
88-
StatusSeparator: statusSeparator,
89-
DetailsOuterSeparator: detailsOuterSeparator,
90-
DetailsInnerSeparator: detailsInnerSeparator,
85+
StatusSeparator: statusSeparator,
86+
DetailsSeparator: detailsSeparator,
9187
}
9288
}
9389

9490
// CopyLogMessageFormat creates a copy of a log message format
9591
func CopyLogMessageFormat(format *LogMessageFormat) *LogMessageFormat {
9692
return &LogMessageFormat{
97-
StatusSeparator: format.StatusSeparator,
98-
DetailsOuterSeparator: format.DetailsOuterSeparator,
99-
DetailsInnerSeparator: format.DetailsInnerSeparator,
93+
StatusSeparator: format.StatusSeparator,
94+
DetailsSeparator: format.DetailsSeparator,
10095
}
10196
}
10297

10398
// NewLogErrorFormat creates a new log error format
10499
func NewLogErrorFormat(
105-
statusSeparator, errorsOuterSeparator, errorsInnerSeparator gologgerstrings.Separator,
100+
statusSeparator *gologgerstrings.ContentSeparator,
101+
errorsSeparator *gologgerstrings.MultilineSeparator,
106102
) *LogErrorFormat {
107103
return &LogErrorFormat{
108-
StatusSeparator: statusSeparator,
109-
ErrorsOuterSeparator: errorsOuterSeparator,
110-
ErrorsInnerSeparator: errorsInnerSeparator,
104+
StatusSeparator: statusSeparator,
105+
ErrorsSeparator: errorsSeparator,
111106
}
112107
}
113108

114109
// CopyLogErrorFormat creates a copy of a log error format
115110
func CopyLogErrorFormat(format *LogErrorFormat) *LogErrorFormat {
116111
return &LogErrorFormat{
117-
StatusSeparator: format.StatusSeparator,
118-
ErrorsOuterSeparator: format.ErrorsOuterSeparator,
119-
ErrorsInnerSeparator: format.ErrorsInnerSeparator,
112+
StatusSeparator: format.StatusSeparator,
113+
ErrorsSeparator: format.ErrorsSeparator,
120114
}
121115
}
122116

123117
// NewLoggerFormat creates a new logger format
124118
func NewLoggerFormat(
125-
nameSeparator, messageSeparator gologgerstrings.Separator,
119+
nameSeparator *gologgerstrings.ContentSeparator, messageSeparator gologgerstrings.Separator,
126120
) *LoggerFormat {
127121
return &LoggerFormat{
128122
NameSeparator: nameSeparator,
@@ -155,7 +149,7 @@ func NewLogMessage(
155149

156150
// FormatDetails gets the formatted details
157151
func (l *LogMessage) FormatDetails() string {
158-
return gologgerstrings.FormatStringArray(l.format.DetailsOuterSeparator, l.format.DetailsInnerSeparator, &l.details)
152+
return gologgerstrings.FormatStringArray(l.format.DetailsSeparator, &l.details)
159153
}
160154

161155
// String gets the string representation of a log message
@@ -192,7 +186,7 @@ func NewLogError(title string, format *LogErrorFormat, errors ...error) *LogErro
192186

193187
// FormatErrors gets the formatted errors
194188
func (l *LogError) FormatErrors() string {
195-
return gologgerstrings.FormatErrorArray(l.format.ErrorsOuterSeparator, l.format.ErrorsInnerSeparator, &l.errors)
189+
return gologgerstrings.FormatErrorArray(l.format.ErrorsSeparator, &l.errors)
196190
}
197191

198192
// String gets the string representation of a log error

strings/strings.go

Lines changed: 81 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,70 +5,128 @@ import (
55
"strings"
66
)
77

8-
// Separator is the separator for a string
9-
type Separator string
8+
type (
9+
// Separator is the separator for a string
10+
Separator string
11+
12+
// ContentSeparator is the separator for the content
13+
ContentSeparator struct {
14+
LeftSeparator Separator
15+
RightSeparator Separator
16+
}
17+
18+
// MultilineSeparator is the separator for the multiline content
19+
MultilineSeparator struct {
20+
LineSeparator Separator
21+
TabSize int
22+
}
23+
)
1024

1125
// Separator constants
1226
const (
1327
SpaceSeparator Separator = " "
1428
CommaSeparator Separator = ","
1529
NewLineSeparator Separator = "\n"
1630
TabSeparator Separator = "\t"
17-
NoneSeparator Separator = ""
1831
)
1932

33+
// NewContentSeparator creates a new content separator
34+
func NewContentSeparator(leftSeparator, rightSeparator Separator) *ContentSeparator {
35+
return &ContentSeparator{
36+
LeftSeparator: leftSeparator,
37+
RightSeparator: rightSeparator,
38+
}
39+
}
40+
41+
// NewRepeatedContentSeparator creates a new content separator with the same separator
42+
func NewRepeatedContentSeparator(separator Separator) *ContentSeparator {
43+
return NewContentSeparator(separator, separator)
44+
}
45+
46+
// NewMultilineSeparator creates a new multiline separator
47+
func NewMultilineSeparator(lineSeparator Separator, tabSize int) *MultilineSeparator {
48+
return &MultilineSeparator{
49+
LineSeparator: lineSeparator,
50+
TabSize: tabSize,
51+
}
52+
}
53+
54+
// TabSeparator returns a tab separator
55+
func (m *MultilineSeparator) TabSeparator() Separator {
56+
return Separator(strings.Repeat(string(TabSeparator), m.TabSize))
57+
}
58+
2059
// AddCharacters adds some characters to a string
21-
func AddCharacters(content, leftCharacters, rightCharacters string, separator Separator) string {
22-
if separator == NoneSeparator {
23-
return leftCharacters + content + rightCharacters
60+
func AddCharacters(content, leftCharacters, rightCharacters string, contentSeparator *ContentSeparator) string {
61+
if contentSeparator == nil {
62+
return strings.Join([]string{leftCharacters, content, rightCharacters}, "")
2463
}
25-
return leftCharacters + string(separator) + content + string(separator) + rightCharacters
64+
65+
return strings.Join(
66+
[]string{
67+
leftCharacters,
68+
string(contentSeparator.LeftSeparator),
69+
content,
70+
string(contentSeparator.RightSeparator),
71+
rightCharacters,
72+
}, "",
73+
)
2674
}
2775

2876
// AddBrackets adds brackets to a string
29-
func AddBrackets(name string, separator Separator) string {
30-
return AddCharacters(name, "[", "]", separator)
77+
func AddBrackets(name string, contentSeparator *ContentSeparator) string {
78+
return AddCharacters(name, "[", "]", contentSeparator)
3179
}
3280

3381
// AddCurlyBrackets adds curly brackets to a string
34-
func AddCurlyBrackets(name string) string {
35-
return AddCharacters(name, "{", "}", SpaceSeparator)
82+
func AddCurlyBrackets(name string, contentSeparator *ContentSeparator) string {
83+
return AddCharacters(name, "{", "}", contentSeparator)
3684
}
3785

3886
// AddParentheses adds parentheses to a string
39-
func AddParentheses(name string) string {
40-
return AddCharacters(name, "(", ")", SpaceSeparator)
87+
func AddParentheses(name string, contentSeparator *ContentSeparator) string {
88+
return AddCharacters(name, "(", ")", contentSeparator)
4189
}
4290

4391
// FormatStatus gets the formatted status
44-
func FormatStatus(status gologgerstatus.Status, separator Separator) string {
45-
return AddBrackets(status.String(), separator)
92+
func FormatStatus(status gologgerstatus.Status, contentSeparator *ContentSeparator) string {
93+
return AddBrackets(status.String(), contentSeparator)
4694
}
4795

4896
// FormatStringArray returns a string with all the strings in the array formatted
49-
func FormatStringArray(outerSeparator, innerSeparator Separator, stringArray *[]string) string {
97+
func FormatStringArray(multilineSeparator *MultilineSeparator, stringArray *[]string) string {
5098
if stringArray == nil || len(*stringArray) == 0 {
5199
return ""
52100
}
53101

102+
// Separators
103+
lineSeparator := multilineSeparator.LineSeparator
104+
tabSeparator := multilineSeparator.TabSeparator()
105+
lineAndTabSeparator := lineSeparator + tabSeparator
106+
54107
// Check if there is only one element
55-
midSeparator := string(outerSeparator) + string(innerSeparator)
56108
if len(*stringArray) == 1 {
57-
return AddBrackets((*stringArray)[0], outerSeparator+innerSeparator)
109+
return AddBrackets(
110+
(*stringArray)[0],
111+
NewContentSeparator(
112+
lineAndTabSeparator,
113+
lineSeparator,
114+
),
115+
)
58116
} else {
59117
var formattedDetails strings.Builder
60118

61119
// Add formatted details
62-
formattedDetails.WriteString(midSeparator)
120+
formattedDetails.WriteString(string(tabSeparator))
63121
for i, str := range *stringArray {
64122
formattedDetails.WriteString(str)
65123

66124
if i < len(*stringArray)-1 {
67-
formattedDetails.WriteString(midSeparator)
125+
formattedDetails.WriteString(string(lineAndTabSeparator))
68126
}
69127
}
70128

71-
return AddBrackets(formattedDetails.String(), outerSeparator)
129+
return AddBrackets(formattedDetails.String(), NewRepeatedContentSeparator(lineSeparator))
72130
}
73131
}
74132

@@ -87,7 +145,7 @@ func MapErrorArrayToStringArray(errorArray *[]error) *[]string {
87145
}
88146

89147
// FormatErrorArray returns a string with all the errors in the array formatted
90-
func FormatErrorArray(outerSeparator, innerSeparator Separator, errorArray *[]error) string {
148+
func FormatErrorArray(multilineSeparator *MultilineSeparator, errorArray *[]error) string {
91149
mappedErrorArray := MapErrorArrayToStringArray(errorArray)
92-
return FormatStringArray(outerSeparator, innerSeparator, mappedErrorArray)
150+
return FormatStringArray(multilineSeparator, mappedErrorArray)
93151
}

0 commit comments

Comments
 (0)