github.com/vchain-us/vcn@v0.9.11-0.20210921212052-a2484d23c0b3/pkg/cmd/serve/responses.go (about)

     1  /*
     2   * Copyright (c) 2018-2020 vChain, Inc. All Rights Reserved.
     3   * This software is released under GPL3.
     4   * The full license information can be found under:
     5   * https://www.gnu.org/licenses/gpl-3.0.en.html
     6   *
     7   */
     8  
     9  package serve
    10  
    11  import (
    12  	"encoding/json"
    13  	"net/http"
    14  
    15  	"github.com/vchain-us/vcn/internal/logs"
    16  	"github.com/vchain-us/vcn/pkg/cmd/internal/types"
    17  )
    18  
    19  type errorResponse struct {
    20  	Message string `json:"message"`
    21  	Code    int    `json:"code"`
    22  	Error   string `json:"error"`
    23  }
    24  
    25  func writeResponse(w http.ResponseWriter, code int, b []byte) {
    26  	headers := w.Header()
    27  	headers.Set("Content-Type", "application/json")
    28  	w.WriteHeader(code)
    29  	_, err := w.Write(b)
    30  	if err != nil {
    31  		logs.LOG.Error(err)
    32  	}
    33  }
    34  
    35  func writeResult(w http.ResponseWriter, code int, r *types.Result) {
    36  	b, err := json.Marshal(r)
    37  	if err != nil || b == nil {
    38  		writeError(w, http.StatusInternalServerError, err)
    39  		return
    40  	}
    41  
    42  	writeResponse(w, code, b)
    43  }
    44  
    45  func writeResults(w http.ResponseWriter, code int, r []types.Result) {
    46  	b, err := json.Marshal(r)
    47  	if err != nil || b == nil {
    48  		writeError(w, http.StatusInternalServerError, err)
    49  		return
    50  	}
    51  
    52  	writeResponse(w, code, b)
    53  }
    54  
    55  func writeLcResult(w http.ResponseWriter, code int, r *types.LcResult) {
    56  	b, err := json.Marshal(r)
    57  	if err != nil || b == nil {
    58  		writeError(w, http.StatusInternalServerError, err)
    59  		return
    60  	}
    61  
    62  	writeResponse(w, code, b)
    63  }
    64  
    65  func writeLcResults(w http.ResponseWriter, code int, r []*types.LcResult) {
    66  	b, err := json.Marshal(r)
    67  	if err != nil || b == nil {
    68  		writeError(w, http.StatusInternalServerError, err)
    69  		return
    70  	}
    71  
    72  	writeResponse(w, code, b)
    73  }
    74  
    75  func writeError(w http.ResponseWriter, code int, err error) {
    76  	eR := errorResponse{
    77  		Message: http.StatusText(code),
    78  		Code:    code,
    79  		Error:   err.Error(),
    80  	}
    81  	b, _ := json.Marshal(eR)
    82  
    83  	writeResponse(w, code, b)
    84  }