diff options
| author | Stefan Majewsky <majewsky@gmx.net> | 2018-02-07 19:33:36 +0100 |
|---|---|---|
| committer | Stefan Majewsky <majewsky@gmx.net> | 2018-02-07 19:33:36 +0100 |
| commit | 801b5207dcbf3438e7612e1f7edc9de32ce0780c (patch) | |
| tree | 6f0454ec49bf769e361cfa393290efc68583ca67 /generated.go.in | |
| parent | 8bddda344201d9f034b5e9c2e9c37a25caeb80cb (diff) | |
| download | go-schwift-801b5207dcbf3438e7612e1f7edc9de32ce0780c.tar.gz | |
switch from reflection to code generation
This allows me to make the API much simpler. More simplification
forthcoming in the following commit; I just want to make a cut since
`make test` is happy right now.
Diffstat (limited to 'generated.go.in')
| -rw-r--r-- | generated.go.in | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/generated.go.in b/generated.go.in new file mode 100644 index 0000000..034a8e4 --- /dev/null +++ b/generated.go.in @@ -0,0 +1,124 @@ +{ + "Account": { + "Fields": [ + { "Header": "X-Account-Bytes-Used", "Attribute": "BytesUsed", "Type": "headers.Uint64Readonly" }, + { "Header": "X-Account-Container-Count", "Attribute": "ContainerCount", "Type": "headers.Uint64Readonly" }, + { "Header": "X-Account-Meta-", "Attribute": "Metadata", "Type": "headers.Metadata" }, + { "Header": "X-Account-Meta-Quota-Bytes", "Attribute": "QuotaBytes", "Type": "headers.Uint64" }, + { "Header": "X-Account-Meta-Temp-URL-Key-2", "Attribute": "TempURLKey2", "Type": "headers.String" }, + { "Header": "X-Account-Meta-Temp-URL-Key", "Attribute": "TempURLKey", "Type": "headers.String" }, + { "Header": "X-Account-Object-Count", "Attribute": "ObjectCount", "Type": "headers.Uint64Readonly" }, + { "Header": "X-Timestamp", "Attribute": "Timestamp", "Type": "headers.UnixTimeReadonly" } + ] + }, + "Container": { + "Fields": [ + { "Header": "X-Container-Bytes-Used", "Attribute": "BytesUsed", "Type": "headers.Uint64Readonly" }, + { "Header": "X-Container-Meta-", "Attribute": "Metadata", "Type": "headers.Metadata" }, + { "Header": "X-Container-Meta-Quota-Bytes", "Attribute": "BytesUsedQuota", "Type": "headers.Uint64" }, + { "Header": "X-Container-Meta-Quota-Count", "Attribute": "ObjectCountQuota", "Type": "headers.Uint64" }, + { "Header": "X-Container-Meta-Temp-URL-Key-2", "Attribute": "TempURLKey2", "Type": "headers.String" }, + { "Header": "X-Container-Meta-Temp-URL-Key", "Attribute": "TempURLKey", "Type": "headers.String" }, + { "Header": "X-Container-Object-Count", "Attribute": "ObjectCount", "Type": "headers.Uint64Readonly" }, + { "Header": "X-Container-Read", "Attribute": "ReadACL", "Type": "headers.String" }, + { "Header": "X-Container-Sync-Key", "Attribute": "SyncKey", "Type": "headers.String" }, + { "Header": "X-Container-Sync-To", "Attribute": "SyncTo", "Type": "headers.String" }, + { "Header": "X-Container-Write", "Attribute": "WriteACL", "Type": "headers.String" }, + { "Header": "X-History-Location", "Attribute": "HistoryLocation", "Type": "headers.String" }, + { "Header": "X-Storage-Policy", "Attribute": "StoragePolicy", "Type": "headers.String" }, + { "Header": "X-Timestamp", "Attribute": "Timestamp", "Type": "headers.UnixTimeReadonly" }, + { "Header": "X-Versions-Location", "Attribute": "VersionsLocation", "Type": "headers.String" } + ] + } +} +--- +/******************************************************************************* +* +* THIS FILE IS AUTOGENERATED. +* +* Edit `generated.go.in` instead and run `make generate` to produce this file. +* +*******************************************************************************/ + +package schwift + +import ( + "net/textproto" + + "github.com/majewsky/schwift/headers" +) + +{{- range $htype, $hmeta := . }} + +//{{$htype}}Headers contains the headers for a schwift.{{$htype}} instance. +// +//To read and write well-known headers, use the methods on this type. +//To read and write arbitary headers, use the methods on type Headers. +type {{$htype}}Headers map[string]string + +//Clear sets the value for the specified header to the empty string. When the +//Headers instance is then sent to the server with Update(), the server will +//delete the value for that header; cf. Del(). +func (h {{$htype}}Headers) Clear(key string) { + h[textproto.CanonicalMIMEHeaderKey(key)] = "" +} + +//Del deletes a key from the Headers instance. When the Headers instance +//is then sent to the server with Update(), Del() has different effects +//depending on context because of Swift's inconsistent API: +// +//For most writable attributes, a key which has been deleted with Del() will +//remain unchanged on the server. To remove the key on the server, use Clear() +//instead. +{{- if eq $htype "Object" }} +// +//For object metadata (but not other object attributes), deleting a key will +//cause that key to be deleted on the server. Del() is identical to Clear() in +//this case. +{{- end }} +func (h {{$htype}}Headers) Del(key string) { + delete(h, textproto.CanonicalMIMEHeaderKey(key)) +} + +//Get returns the value for the specified header. +func (h {{$htype}}Headers) Get(key string) string { + return h[textproto.CanonicalMIMEHeaderKey(key)] +} + +//Set sets a new value for the specified header. Any existing value will be +//overwritten. +func (h {{$htype}}Headers) Set(key, value string) { + h[textproto.CanonicalMIMEHeaderKey(key)] = value +} + +//Validate returns headers.MalformedHeaderError if the value of any well-known +//header does not conform to its data type. This is called automatically by +//Schwift when preparing an {{$htype}}Headers instance from a GET/HEAD response, +//so you usually do not need to do it yourself. You will get the validation error +//from the {{$htype}} method doing the request, e.g. Headers(). +func (h {{$htype}}Headers) Validate() error { +{{- range $field := $hmeta.Fields }}{{if not (eq $field.Type "headers.String" "headers.Metadata")}} + if err := h.{{$field.Attribute}}().Validate(); err != nil { + return err + } +{{- end }}{{ end }} + return evadeGolintComplaint1() +} + +{{- range $field := $hmeta.Fields }} + +//{{$field.Attribute}} provides type-safe access to {{$field.Header}} headers. +func (h {{$htype}}Headers) {{$field.Attribute}}() {{$field.Type}} { + return {{$field.Type}}{ + Base: headers.Base{ + H: h, + K: "{{$field.Header}}", + }, + } +} +{{- end }} +{{- end }} + +func evadeGolintComplaint1() error { + return nil +} |
