Page MenuHomeMusing Studio

No OneTemporary

diff --git a/errors.go b/errors.go
new file mode 100644
index 0000000..3dcafd0
--- /dev/null
+++ b/errors.go
@@ -0,0 +1,17 @@
+package impart
+
+import (
+ "net/http"
+)
+
+type HTTPError struct {
+ Status int
+ Message string
+}
+
+func (h HTTPError) Error() string {
+ if h.Message == "" {
+ return http.StatusText(h.Status)
+ }
+ return h.Message
+}
diff --git a/response.go b/response.go
new file mode 100644
index 0000000..04ed0dd
--- /dev/null
+++ b/response.go
@@ -0,0 +1,62 @@
+package impart
+
+import (
+ "encoding/json"
+ "net/http"
+ "strconv"
+)
+
+type (
+ // envelope contains metadata and optional data for a response object.
+ envelope struct {
+ MetaData metadata `json:"meta"`
+ Data interface{} `json:"data,omitempty"`
+ }
+
+ // metadata contains more information about the response
+ metadata struct {
+ Code int `json:"code"`
+ ErrorType string `json:"error_type,omitempty"`
+ ErrorMessage string `json:"error_message,omitempty"`
+ }
+)
+
+func writeBody(w http.ResponseWriter, body []byte, status int, contentType string) error {
+ w.Header().Set("Content-Type", contentType+"; charset=UTF-8")
+ w.Header().Set("Content-Length", strconv.Itoa(len(body)))
+ w.WriteHeader(status)
+ _, err := w.Write(body)
+ return err
+}
+
+func renderJSON(w http.ResponseWriter, value interface{}, status int) error {
+ body, err := json.Marshal(value)
+ if err != nil {
+ return err
+ }
+ return writeBody(w, body, status, "application/json")
+}
+
+func renderString(w http.ResponseWriter, status int, msg string) error {
+ return writeBody(w, []byte(msg), status, "text/plain")
+}
+
+func WriteSuccess(w http.ResponseWriter, data interface{}, status int) error {
+ env := &envelope{
+ MetaData: metadata{
+ Code: status,
+ },
+ Data: data,
+ }
+ return renderJSON(w, env, status)
+}
+
+func WriteError(w http.ResponseWriter, e HTTPError) error {
+ env := &envelope{
+ MetaData: metadata{
+ Code: e.Status,
+ ErrorMessage: e.Message,
+ },
+ }
+ return renderJSON(w, env, e.Status)
+}

File Metadata

Mime Type
text/x-diff
Expires
Fri, May 16, 4:56 PM (1 d, 4 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3240239

Event Timeline