1717************************************************************************/
1818/*___INFO__MARK_END__*/
1919
20- package main
20+ package adapter
2121
2222import (
2323 "context"
@@ -70,7 +70,7 @@ type CommandRequest struct {
7070 Args []json.RawMessage `json:"args"`
7171}
7272
73- // NewAdapter creates an http.Handler that for any Go interface.
73+ // NewAdapter creates an http.Handler for any Go interface.
7474// The method name and arguments are expected in the JSON request body.
7575// The response is the return value of the method also in JSON format.
7676// The arguments and the return values must have a JSON serializable format.
@@ -120,7 +120,7 @@ func (a *adapter) ServeHTTP(w http.ResponseWriter, r *http.Request) {
120120 return
121121 }
122122
123- logger .InfoContext (ctx , "request" , req .MethodName )
123+ logger .InfoContext (ctx , "request" , "method" , req .MethodName )
124124
125125 method := reflect .ValueOf (a .instance ).MethodByName (req .MethodName )
126126 if ! method .IsValid () {
@@ -158,22 +158,23 @@ func (a *adapter) ServeHTTP(w http.ResponseWriter, r *http.Request) {
158158 if len (results ) > 1 {
159159 if err , ok := results [1 ].Interface ().(error ); ok && err != nil {
160160 logErr := fmt .Errorf ("method call %s failed: %w" , req .MethodName ,
161- results [0 ].Interface ().(error ))
161+ results [1 ].Interface ().(error ))
162162 a .fail (ctx , w , r , http .StatusInternalServerError , logErr .Error (), err )
163163 return
164164 }
165165 }
166166
167167 if len (results ) > 0 {
168168 // check if the result is an error
169- if _ , ok := results [0 ].Interface ().(error ); ok {
169+ if err , ok := results [0 ].Interface ().(error ); ok && err != nil {
170170 logErr := fmt .Errorf ("method call %s failed: %w" , req .MethodName ,
171171 results [0 ].Interface ().(error ))
172172 a .fail (ctx , w , r , http .StatusInternalServerError , logErr .Error (),
173173 results [0 ].Interface ().(error ))
174174 return
175175 }
176176
177+ // if there is no error, encode the result
177178 w .Header ().Set ("Content-Type" , "application/json" )
178179 if err := json .NewEncoder (w ).Encode (results [0 ].Interface ()); err != nil {
179180 logErr := fmt .Errorf ("failed to encode response for method %s: %w" ,
@@ -183,15 +184,15 @@ func (a *adapter) ServeHTTP(w http.ResponseWriter, r *http.Request) {
183184 return
184185 }
185186 }
186- logger .InfoContext (ctx , "request successfully processed" , req .MethodName )
187+ logger .InfoContext (ctx , "request successfully processed" , "method" , req .MethodName )
187188}
188189
189190func (a * adapter ) fail (ctx context.Context , w http.ResponseWriter , r * http.Request , status int , message string , err error ) {
190191 w .WriteHeader (status )
191192 response := map [string ]string {"error" : message }
192193 logger .InfoContext (ctx , message , "URL" , r .URL .Path )
193194 if err := json .NewEncoder (w ).Encode (response ); err != nil {
194- logger .ErrorContext (ctx , "Failed to encode error response" , err )
195+ logger .ErrorContext (ctx , "Failed to encode error response" , "error" , err )
195196 }
196197 // write the error to the response body
197198 w .Write ([]byte (message ))
0 commit comments