57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
package internal
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
type StatusMessageBuilder struct {
|
|
statusCode *int
|
|
message *string
|
|
}
|
|
|
|
func NewStatusMessage() *StatusMessageBuilder {
|
|
return &StatusMessageBuilder{}
|
|
}
|
|
|
|
func (sm *StatusMessageBuilder) StatusCode(statusCode int) *StatusMessageBuilder {
|
|
sm.statusCode = &statusCode
|
|
return sm
|
|
}
|
|
|
|
func (sm *StatusMessageBuilder) Message(message string) *StatusMessageBuilder {
|
|
sm.message = &message
|
|
return sm
|
|
}
|
|
|
|
func (sm *StatusMessageBuilder) Build() *StatusMessage {
|
|
return &StatusMessage{
|
|
StatusCode: sm.statusCode,
|
|
Message: sm.message,
|
|
}
|
|
}
|
|
|
|
type StatusMessage struct {
|
|
StatusCode *int
|
|
Message *string `json:"msg"`
|
|
}
|
|
|
|
func ErrorResponse(w http.ResponseWriter, statusMessage *StatusMessage) error {
|
|
if statusMessage.StatusCode == nil {
|
|
return fmt.Errorf("status code is missing")
|
|
}
|
|
if statusMessage.Message == nil {
|
|
return fmt.Errorf("message is missing")
|
|
}
|
|
w.Header().Add("Content-Type", "application/json")
|
|
w.WriteHeader(*statusMessage.StatusCode)
|
|
|
|
b, err := json.Marshal(statusMessage)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to marshal JSON")
|
|
}
|
|
w.Write(b)
|
|
return nil
|
|
}
|