mirror of
https://github.com/oatpp/oatpp.git
synced 2025-03-19 18:10:23 +08:00
http::Range: support open ranges
This commit is contained in:
parent
ad442ae484
commit
ca1362e884
@ -168,7 +168,25 @@ Range Range::parse(const oatpp::String& str) {
|
||||
return parse(caret);
|
||||
}
|
||||
|
||||
Range Range::parseNextRemaining(oatpp::utils::parser::Caret& caret, const oatpp::String& units) {
|
||||
|
||||
if(!caret.canContinueAtChar('-', 1)) return Range();
|
||||
|
||||
auto endLabel = caret.putLabel();
|
||||
caret.findCharFromSet(" ,\r\n");
|
||||
endLabel.end();
|
||||
|
||||
bool success;
|
||||
auto start = -1;
|
||||
auto end = oatpp::utils::Conversion::strToInt64(endLabel.toString(), success);
|
||||
if(!success) return Range();
|
||||
return Range(units, start, end);
|
||||
}
|
||||
|
||||
Range Range::parseNext(oatpp::utils::parser::Caret& caret, const oatpp::String& units) {
|
||||
|
||||
if(caret.canContinueAtChar('-')) return parseNextRemaining(caret, units);
|
||||
|
||||
auto startLabel = caret.putLabel();
|
||||
if(caret.findChar('-')) {
|
||||
startLabel.end();
|
||||
@ -185,8 +203,11 @@ Range Range::parseNext(oatpp::utils::parser::Caret& caret, const oatpp::String&
|
||||
bool success;
|
||||
auto start = oatpp::utils::Conversion::strToInt64(startLabel.toString(), success);
|
||||
if(!success) return Range();
|
||||
auto end = oatpp::utils::Conversion::strToInt64(endLabel.toString(), success);
|
||||
if(!success) return Range();
|
||||
v_int64 end = -1;
|
||||
if(endLabel.getSize() > 0) {
|
||||
end = oatpp::utils::Conversion::strToInt64(endLabel.toString(), success);
|
||||
if(!success) return Range();
|
||||
}
|
||||
return Range(units, start, end);
|
||||
}
|
||||
|
||||
|
@ -511,6 +511,8 @@ public:
|
||||
class Range {
|
||||
public:
|
||||
static const char* const UNIT_BYTES;
|
||||
private:
|
||||
static Range parseNextRemaining(oatpp::utils::parser::Caret& caret, const oatpp::String& units);
|
||||
private:
|
||||
Range()
|
||||
: units(nullptr)
|
||||
|
Loading…
x
Reference in New Issue
Block a user