Page Menu
Home
Musing Studio
Search
Configure Global Search
Log In
Files
F10669768
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
1 KB
Subscribers
None
View Options
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
Details
Attached
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
Attached To
rI impart
Event Timeline
Log In to Comment