aboutsummaryrefslogtreecommitdiff
path: root/generated.go.in
diff options
context:
space:
mode:
authorStefan Majewsky <majewsky@gmx.net>2018-02-07 19:33:36 +0100
committerStefan Majewsky <majewsky@gmx.net>2018-02-07 19:33:36 +0100
commit801b5207dcbf3438e7612e1f7edc9de32ce0780c (patch)
tree6f0454ec49bf769e361cfa393290efc68583ca67 /generated.go.in
parent8bddda344201d9f034b5e9c2e9c37a25caeb80cb (diff)
downloadgo-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.in124
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
+}