blob: a4fbd8ca26c6fdf13b5265f28682aa5e5c3b2b61 [file] [log] [blame]
Jon Perritt816d2a02014-03-11 20:49:46 -05001package objects
2
3import (
Jon Perritt816d2a02014-03-11 20:49:46 -05004 "encoding/json"
Jon Perritt884e0312014-08-14 17:25:38 -05005 "io"
Jon Perritteb575642014-04-24 15:16:31 -05006 "io/ioutil"
Jon Perritt816d2a02014-03-11 20:49:46 -05007 "strings"
8)
9
Jon Perrittbef727e2014-05-12 22:41:55 -050010// Object is a structure that holds information related to a storage object.
Jon Perrittc19adea2014-04-15 16:56:01 -050011type Object map[string]interface{}
Jon Perritt816d2a02014-03-11 20:49:46 -050012
Jon Perrittbef727e2014-05-12 22:41:55 -050013// ListOpts is a structure that holds parameters for listing objects.
Jon Perritt816d2a02014-03-11 20:49:46 -050014type ListOpts struct {
15 Container string
16 Full bool
17 Params map[string]string
18}
19
Jon Perrittbef727e2014-05-12 22:41:55 -050020// DownloadOpts is a structure that holds parameters for downloading an object.
Jon Perritt816d2a02014-03-11 20:49:46 -050021type DownloadOpts struct {
22 Container string
23 Name string
24 Headers map[string]string
25 Params map[string]string
26}
27
Jon Perrittbef727e2014-05-12 22:41:55 -050028// CreateOpts is a structure that holds parameters for creating an object.
Jon Perritt816d2a02014-03-11 20:49:46 -050029type CreateOpts struct {
30 Container string
31 Name string
Jon Perritt884e0312014-08-14 17:25:38 -050032 Content io.Reader
Jon Perritt816d2a02014-03-11 20:49:46 -050033 Metadata map[string]string
34 Headers map[string]string
35 Params map[string]string
36}
37
Jon Perrittbef727e2014-05-12 22:41:55 -050038// CopyOpts is a structure that holds parameters for copying one object to another.
Jon Perritt816d2a02014-03-11 20:49:46 -050039type CopyOpts struct {
40 Container string
41 Name string
42 NewContainer string
43 NewName string
44 Metadata map[string]string
45 Headers map[string]string
46}
47
Jon Perrittbef727e2014-05-12 22:41:55 -050048// DeleteOpts is a structure that holds parameters for deleting an object.
Jon Perritt816d2a02014-03-11 20:49:46 -050049type DeleteOpts struct {
50 Container string
51 Name string
52 Params map[string]string
53}
54
Jon Perrittbef727e2014-05-12 22:41:55 -050055// GetOpts is a structure that holds parameters for getting an object's metadata.
Jon Perritt816d2a02014-03-11 20:49:46 -050056type GetOpts struct {
57 Container string
58 Name string
59 Headers map[string]string
60 Params map[string]string
61}
62
Jon Perrittbef727e2014-05-12 22:41:55 -050063// UpdateOpts is a structure that holds parameters for updating, creating, or deleting an
64// object's metadata.
Jon Perritt816d2a02014-03-11 20:49:46 -050065type UpdateOpts struct {
66 Container string
67 Name string
68 Metadata map[string]string
69 Headers map[string]string
70}
71
Jon Perritteb575642014-04-24 15:16:31 -050072// ExtractInfo is a function that takes a ListResult (of type *http.Response)
Jon Perritt816d2a02014-03-11 20:49:46 -050073// and returns the objects' information.
Jon Perritteb575642014-04-24 15:16:31 -050074func ExtractInfo(lr ListResult) ([]Object, error) {
Jon Perritt816d2a02014-03-11 20:49:46 -050075 var oi []Object
Jon Perritteb575642014-04-24 15:16:31 -050076 defer lr.Body.Close()
77 body, err := ioutil.ReadAll(lr.Body)
78 if err != nil {
79 return oi, err
80 }
81 err = json.Unmarshal(body, &oi)
Jon Perritt816d2a02014-03-11 20:49:46 -050082 return oi, err
83}
84
Jon Perritteb575642014-04-24 15:16:31 -050085// ExtractNames is a function that takes a ListResult (of type *http.Response)
Jon Perritt816d2a02014-03-11 20:49:46 -050086// and returns the objects' names.
Jon Perritteb575642014-04-24 15:16:31 -050087func ExtractNames(lr ListResult) ([]string, error) {
88 var ons []string
89 defer lr.Body.Close()
90 body, err := ioutil.ReadAll(lr.Body)
91 if err != nil {
92 return ons, err
93 }
94 jr := string(body)
95 ons = strings.Split(jr, "\n")
Jon Perritt816d2a02014-03-11 20:49:46 -050096 ons = ons[:len(ons)-1]
Jon Perritteb575642014-04-24 15:16:31 -050097 return ons, nil
Jon Perritt816d2a02014-03-11 20:49:46 -050098}
99
Jon Perritteb575642014-04-24 15:16:31 -0500100// ExtractContent is a function that takes a DownloadResult (of type *http.Response)
Jon Perritt816d2a02014-03-11 20:49:46 -0500101// and returns the object's content.
Jon Perritteb575642014-04-24 15:16:31 -0500102func ExtractContent(dr DownloadResult) ([]byte, error) {
103 var body []byte
104 defer dr.Body.Close()
105 body, err := ioutil.ReadAll(dr.Body)
106 return body, err
Jon Perritt816d2a02014-03-11 20:49:46 -0500107}
108
Jon Perritteb575642014-04-24 15:16:31 -0500109// ExtractMetadata is a function that takes a GetResult (of type *http.Response)
Jon Perritt816d2a02014-03-11 20:49:46 -0500110// and returns the custom metadata associated with the object.
Jon Perritteb575642014-04-24 15:16:31 -0500111func ExtractMetadata(gr GetResult) map[string]string {
Jon Perritt816d2a02014-03-11 20:49:46 -0500112 metadata := make(map[string]string)
Jon Perritteb575642014-04-24 15:16:31 -0500113 for k, v := range gr.Header {
Jon Perritt816d2a02014-03-11 20:49:46 -0500114 if strings.HasPrefix(k, "X-Object-Meta-") {
115 key := strings.TrimPrefix(k, "X-Object-Meta-")
116 metadata[key] = v[0]
117 }
118 }
119 return metadata
120}