On 10/14/21 3:25 AM, Andrey Semashev wrote:
On 10/14/21 2:52 AM, Vinnie Falco via Boost wrote:
On Wed, Oct 13, 2021 at 4:09 PM Gavin Lambert via Boost
wrote: ...
Given the following path:
/path/to/file.txt
What should iterating the segments return?
{ "path", "to", "file.txt" } or { "/path", "/to", "/file.txt" }
or something else?
Given this path:
my/download/folder/
What should iterating the segments return?
{ "my", "download", "folder", "" } or { "my/", "download/", "folder/" } or { "my", "/download", "/folder", "/" }
or something else?
Given an empty relative-ref (empty string) in a url u, what is the encoded path after executing this statement?
u.segments().push_back( "index.htm" );
Anyone feel free to answer!
If std::filesystem::path is an example to follow then path elements should not contain path separators, except the root directory. The trailing separator is indicated by an empty final element. So:
/my/download/folder/
would correspond to:
{ "/", "my", "download", "folder", "" }
and
/path/to/file.txt
to
{ "/", "path", "to", "file.txt" }
I think, URL paths must always have the root directory as the leading slash is a necessary separator from the host and port, so you could probably omit it from the list of elements.
Two corner cases to consider is when you have no path at all, and when you have a root directory as a path. Those two cases have to be distinct in terms of observed sequence of elements. I.e. https:://example.com?foo=42 should be different from https:://example.com/?foo=42 in terms of observed elements of the path.