@@ -23,7 +23,7 @@ import (
23
23
24
24
// SessionSettings maps session settings to values with typed accessors.
25
25
type SessionSettings struct {
26
- settings map [string ]string
26
+ settings map [string ][] byte
27
27
}
28
28
29
29
// ConditionallyRequiredSetting indicates a missing setting.
@@ -37,8 +37,9 @@ func (e ConditionallyRequiredSetting) Error() string {
37
37
38
38
// IncorrectFormatForSetting indicates a setting that is incorrectly formatted.
39
39
type IncorrectFormatForSetting struct {
40
- Setting , Value string
41
- Err error
40
+ Setting string
41
+ Value []byte
42
+ Err error
42
43
}
43
44
44
45
func (e IncorrectFormatForSetting ) Error () string {
@@ -47,7 +48,7 @@ func (e IncorrectFormatForSetting) Error() string {
47
48
48
49
// Init initializes or resets SessionSettings.
49
50
func (s * SessionSettings ) Init () {
50
- s .settings = make (map [string ]string )
51
+ s .settings = make (map [string ][] byte )
51
52
}
52
53
53
54
// NewSessionSettings returns a newly initialized SessionSettings instance.
@@ -58,8 +59,8 @@ func NewSessionSettings() *SessionSettings {
58
59
return s
59
60
}
60
61
61
- // Set assigns a value to a setting on SessionSettings.
62
- func (s * SessionSettings ) Set (setting string , val string ) {
62
+ // SetRaw assigns a value to a setting on SessionSettings.
63
+ func (s * SessionSettings ) SetRaw (setting string , val [] byte ) {
63
64
// Lazy init.
64
65
if s .settings == nil {
65
66
s .Init ()
@@ -68,69 +69,87 @@ func (s *SessionSettings) Set(setting string, val string) {
68
69
s .settings [setting ] = val
69
70
}
70
71
72
+ // Set assigns a string value to a setting on SessionSettings.
73
+ func (s * SessionSettings ) Set (setting string , val string ) {
74
+ // Lazy init
75
+ if s .settings == nil {
76
+ s .Init ()
77
+ }
78
+
79
+ s .settings [setting ] = []byte (val )
80
+ }
81
+
71
82
// HasSetting returns true if a setting is set, false if not.
72
83
func (s * SessionSettings ) HasSetting (setting string ) bool {
73
84
_ , ok := s .settings [setting ]
74
85
return ok
75
86
}
76
87
77
- // Setting is a settings string accessor. Returns an error if the setting is missing.
78
- func (s * SessionSettings ) Setting (setting string ) (string , error ) {
88
+ // RawSetting is a settings accessor that returns the raw byte slice value of
89
+ // the setting. Returns an error if the setting is missing.
90
+ func (s * SessionSettings ) RawSetting (setting string ) ([]byte , error ) {
79
91
val , ok := s .settings [setting ]
80
92
if ! ok {
81
- return val , ConditionallyRequiredSetting {setting }
93
+ return nil , ConditionallyRequiredSetting {Setting : setting }
82
94
}
83
95
84
96
return val , nil
85
97
}
86
98
87
- // IntSetting returns the requested setting parsed as an int. Returns an errror if the setting is not set or cannot be parsed as an int.
88
- func (s * SessionSettings ) IntSetting (setting string ) (val int , err error ) {
89
- stringVal , err := s .Setting (setting )
99
+ // Setting is a settings string accessor. Returns an error if the setting is missing.
100
+ func (s * SessionSettings ) Setting (setting string ) (string , error ) {
101
+ val , err := s .RawSetting (setting )
102
+ if err != nil {
103
+ return "" , err
104
+ }
90
105
106
+ return string (val ), nil
107
+ }
108
+
109
+ // IntSetting returns the requested setting parsed as an int. Returns an errror if the setting is not set or cannot be parsed as an int.
110
+ func (s * SessionSettings ) IntSetting (setting string ) (int , error ) {
111
+ rawVal , err := s .RawSetting (setting )
91
112
if err != nil {
92
- return
113
+ return 0 , err
93
114
}
94
115
95
- if val , err = strconv .Atoi (stringVal ) ; err ! = nil {
96
- return val , IncorrectFormatForSetting { Setting : setting , Value : stringVal , Err : err }
116
+ if val , err : = strconv .Atoi (string ( rawVal )) ; err = = nil {
117
+ return val , nil
97
118
}
98
119
99
- return
120
+ return 0 , IncorrectFormatForSetting { Setting : setting , Value : rawVal , Err : err }
100
121
}
101
122
102
123
// DurationSetting returns the requested setting parsed as a time.Duration.
103
124
// Returns an error if the setting is not set or cannot be parsed as a time.Duration.
104
- func (s * SessionSettings ) DurationSetting (setting string ) (val time.Duration , err error ) {
105
- stringVal , err := s .Setting (setting )
106
-
125
+ func (s * SessionSettings ) DurationSetting (setting string ) (time.Duration , error ) {
126
+ rawVal , err := s .RawSetting (setting )
107
127
if err != nil {
108
- return
128
+ return 0 , err
109
129
}
110
130
111
- if val , err = time .ParseDuration (stringVal ) ; err ! = nil {
112
- return val , IncorrectFormatForSetting { Setting : setting , Value : stringVal , Err : err }
131
+ if val , err : = time .ParseDuration (string ( rawVal )) ; err = = nil {
132
+ return val , nil
113
133
}
114
134
115
- return
135
+ return 0 , IncorrectFormatForSetting { Setting : setting , Value : rawVal , Err : err }
116
136
}
117
137
118
138
// BoolSetting returns the requested setting parsed as a boolean. Returns an error if the setting is not set or cannot be parsed as a bool.
119
139
func (s SessionSettings ) BoolSetting (setting string ) (bool , error ) {
120
- stringVal , err := s .Setting (setting )
121
-
140
+ rawVal , err := s .RawSetting (setting )
122
141
if err != nil {
123
142
return false , err
124
143
}
125
144
126
- switch stringVal {
145
+ switch string ( rawVal ) {
127
146
case "Y" , "y" :
128
147
return true , nil
129
148
case "N" , "n" :
130
149
return false , nil
131
150
}
132
151
133
- return false , IncorrectFormatForSetting {Setting : setting , Value : stringVal }
152
+ return false , IncorrectFormatForSetting {Setting : setting , Value : rawVal }
134
153
}
135
154
136
155
func (s * SessionSettings ) overlay (overlay * SessionSettings ) {
0 commit comments