@@ -23,7 +23,7 @@ import (
2323
2424// SessionSettings maps session settings to values with typed accessors.
2525type SessionSettings struct {
26- settings map [string ]string
26+ settings map [string ][] byte
2727}
2828
2929// ConditionallyRequiredSetting indicates a missing setting.
@@ -37,8 +37,9 @@ func (e ConditionallyRequiredSetting) Error() string {
3737
3838// IncorrectFormatForSetting indicates a setting that is incorrectly formatted.
3939type IncorrectFormatForSetting struct {
40- Setting , Value string
41- Err error
40+ Setting string
41+ Value []byte
42+ Err error
4243}
4344
4445func (e IncorrectFormatForSetting ) Error () string {
@@ -47,7 +48,7 @@ func (e IncorrectFormatForSetting) Error() string {
4748
4849// Init initializes or resets SessionSettings.
4950func (s * SessionSettings ) Init () {
50- s .settings = make (map [string ]string )
51+ s .settings = make (map [string ][] byte )
5152}
5253
5354// NewSessionSettings returns a newly initialized SessionSettings instance.
@@ -58,8 +59,8 @@ func NewSessionSettings() *SessionSettings {
5859 return s
5960}
6061
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 ) {
6364 // Lazy init.
6465 if s .settings == nil {
6566 s .Init ()
@@ -68,69 +69,87 @@ func (s *SessionSettings) Set(setting string, val string) {
6869 s .settings [setting ] = val
6970}
7071
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+
7182// HasSetting returns true if a setting is set, false if not.
7283func (s * SessionSettings ) HasSetting (setting string ) bool {
7384 _ , ok := s .settings [setting ]
7485 return ok
7586}
7687
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 ) {
7991 val , ok := s .settings [setting ]
8092 if ! ok {
81- return val , ConditionallyRequiredSetting {setting }
93+ return nil , ConditionallyRequiredSetting {Setting : setting }
8294 }
8395
8496 return val , nil
8597}
8698
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+ }
90105
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 )
91112 if err != nil {
92- return
113+ return 0 , err
93114 }
94115
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
97118 }
98119
99- return
120+ return 0 , IncorrectFormatForSetting { Setting : setting , Value : rawVal , Err : err }
100121}
101122
102123// DurationSetting returns the requested setting parsed as a time.Duration.
103124// 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 )
107127 if err != nil {
108- return
128+ return 0 , err
109129 }
110130
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
113133 }
114134
115- return
135+ return 0 , IncorrectFormatForSetting { Setting : setting , Value : rawVal , Err : err }
116136}
117137
118138// 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.
119139func (s SessionSettings ) BoolSetting (setting string ) (bool , error ) {
120- stringVal , err := s .Setting (setting )
121-
140+ rawVal , err := s .RawSetting (setting )
122141 if err != nil {
123142 return false , err
124143 }
125144
126- switch stringVal {
145+ switch string ( rawVal ) {
127146 case "Y" , "y" :
128147 return true , nil
129148 case "N" , "n" :
130149 return false , nil
131150 }
132151
133- return false , IncorrectFormatForSetting {Setting : setting , Value : stringVal }
152+ return false , IncorrectFormatForSetting {Setting : setting , Value : rawVal }
134153}
135154
136155func (s * SessionSettings ) overlay (overlay * SessionSettings ) {
0 commit comments