aboutsummaryrefslogtreecommitdiff
path: root/weed/s3api/s3api_policy.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/s3api/s3api_policy.go')
-rw-r--r--weed/s3api/s3api_policy.go22
1 files changed, 19 insertions, 3 deletions
diff --git a/weed/s3api/s3api_policy.go b/weed/s3api/s3api_policy.go
index 6e2c8cfa2..dab2e3f02 100644
--- a/weed/s3api/s3api_policy.go
+++ b/weed/s3api/s3api_policy.go
@@ -47,8 +47,14 @@ type Filter struct {
// Prefix holds the prefix xml tag in <Rule> and <Filter>
type Prefix struct {
- string
- set bool
+ XMLName xml.Name `xml:"Prefix"`
+ set bool
+
+ val string
+}
+
+func (p Prefix) String() string {
+ return p.val
}
// MarshalXML encodes Prefix field into an XML form.
@@ -56,11 +62,21 @@ func (p Prefix) MarshalXML(e *xml.Encoder, startElement xml.StartElement) error
if !p.set {
return nil
}
- return e.EncodeElement(p.string, startElement)
+ return e.EncodeElement(p.val, startElement)
+}
+
+func (p *Prefix) UnmarshalXML(d *xml.Decoder, startElement xml.StartElement) error {
+ prefix := ""
+ _ = d.DecodeElement(&prefix, &startElement)
+ *p = Prefix{set: true, val: prefix}
+ return nil
}
// MarshalXML encodes Filter field into an XML form.
func (f Filter) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+ if !f.set {
+ return nil
+ }
if err := e.EncodeToken(start); err != nil {
return err
}