string& to_str() { return data; }
};
+class LCFilter_S3 : public LCFilter, public XMLObj
+{
+ public:
+ ~LCFilter_S3() override {}
+ string& to_str() { return data; }
+ void to_xml(ostream& out){
+ out << "<Filter>";
+ if (!prefix.empty())
+ out << "<Prefix>" << prefix << "</Prefix>";
+ out << "</Filter>";
+ }
+ void dump_xml(Formatter *f) const {
+ f->open_object_section("Filter");
+ if (!prefix.empty())
+ encode_xml("Prefix", prefix, f);
+ f->close_section(); // Filter
+ }
+};
+
class LCStatus_S3 : public XMLObj
{
public:
string& to_str() { return data; }
};
+class LCDate_S3 : public XMLObj
+{
+public:
+ LCDate_S3() {}
+ ~LCDate_S3() override {}
+ string& to_str() { return data; }
+};
+
class LCDeleteMarker_S3 : public XMLObj
{
public:
bool dm_expiration;
public:
LCExpiration_S3(): dm_expiration(false) {}
- LCExpiration_S3(string _days, bool _dm_expiration) {
+ LCExpiration_S3(string _days, string _date, bool _dm_expiration) {
days = _days;
+ date = _date;
dm_expiration = _dm_expiration;
}
~LCExpiration_S3() override {}
bool xml_end(const char *el) override;
void to_xml(ostream& out) {
+ out << "<Expiration>";
if (dm_expiration) {
- out << "<Expiration>" << "<ExpiredObjectDeleteMarker>" << "true" << "</ExpiredObjectDeleteMarker>" << "</Expiration>";
+ out << "<ExpiredObjectDeleteMarker>" << "true" << "</ExpiredObjectDeleteMarker>";
+ } else if (!days.empty()){
+ out << "<Days>" << days << "</Days>";
} else {
- out << "<Expiration>" << "<Days>" << days << "</Days>"<< "</Expiration>";
+ out << "<Date>" << date << "</Date>";
}
+ out << "</Expiration>";
}
void dump_xml(Formatter *f) const {
f->open_object_section("Expiration");
if (dm_expiration) {
encode_xml("ExpiredObjectDeleteMarker", "true", f);
- } else {
+ } else if (!days.empty()) {
encode_xml("Days", days, f);
+ } else {
+ encode_xml("Date", date, f);
}
f->close_section(); // Expiration
}
void dump_xml(Formatter *f) const {
f->open_object_section("Rule");
encode_xml("ID", id, f);
- encode_xml("Prefix", prefix, f);
+ // In case of an empty filter and an empty Prefix, we defer to Prefix.
+ if (!filter.empty()) {
+ const LCFilter_S3& lc_filter = static_cast<const LCFilter_S3&>(filter);
+ lc_filter.dump_xml(f);
+ } else {
+ encode_xml("Prefix", prefix, f);
+ }
encode_xml("Status", status, f);
if (!expiration.empty() || dm_expiration) {
- LCExpiration_S3 expir(expiration.get_days_str(), dm_expiration);
+ LCExpiration_S3 expir(expiration.get_days_str(), expiration.get_date(), dm_expiration);
expir.dump_xml(f);
}
if (!noncur_expiration.empty()) {
const LCMPExpiration_S3& mp_expir = static_cast<const LCMPExpiration_S3&>(mp_expiration);
mp_expir.dump_xml(f);
}
+
f->close_section(); // Rule
}
};