github.com/e154/smart-home@v0.17.2-0.20240311175135-e530a6e5cd45/system/gate/common/response.go (about)

     1  // This file is part of the Smart Home
     2  // Program complex distribution https://github.com/e154/smart-home
     3  // Copyright (C) 2023, Filippov Alex
     4  //
     5  // This library is free software: you can redistribute it and/or
     6  // modify it under the terms of the GNU Lesser General Public
     7  // License as published by the Free Software Foundation; either
     8  // version 3 of the License, or (at your option) any later version.
     9  //
    10  // This library is distributed in the hope that it will be useful,
    11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13  // Library General Public License for more details.
    14  //
    15  // You should have received a copy of the GNU Lesser General Public
    16  // License along with this library.  If not, see
    17  // <https://www.gnu.org/licenses/>.
    18  
    19  package common
    20  
    21  import (
    22  	"fmt"
    23  	"net/http"
    24  )
    25  
    26  // HTTPResponse is a serializable version of http.Response ( with only useful fields )
    27  type HTTPResponse struct {
    28  	StatusCode    int
    29  	Header        http.Header
    30  	ContentLength int64
    31  }
    32  
    33  // SerializeHTTPResponse create a new HTTPResponse from a http.Response
    34  func SerializeHTTPResponse(resp *http.Response) *HTTPResponse {
    35  	r := new(HTTPResponse)
    36  	r.StatusCode = resp.StatusCode
    37  	r.Header = resp.Header
    38  	r.ContentLength = resp.ContentLength
    39  	return r
    40  }
    41  
    42  // NewHTTPResponse creates a new HTTPResponse
    43  func NewHTTPResponse() (r *HTTPResponse) {
    44  	r = new(HTTPResponse)
    45  	r.Header = make(http.Header)
    46  	return
    47  }
    48  
    49  // ProxyError log error and return a HTTP 526 error with the message
    50  func ProxyError(w http.ResponseWriter, err error) {
    51  	fmt.Println(err.Error())
    52  	http.Error(w, err.Error(), 526)
    53  }
    54  
    55  // ProxyErrorf log error and return a HTTP 526 error with the message
    56  func ProxyErrorf(w http.ResponseWriter, format string, args ...interface{}) {
    57  	ProxyError(w, fmt.Errorf(format, args...))
    58  }