diff options
Diffstat (limited to 'weed/s3api/s3api_policy.go')
| -rw-r--r-- | weed/s3api/s3api_policy.go | 22 |
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 } |
