uri: implement ability to parse URIs passed in different ways
Previously, URI can be passed as a string, which contains one URI or several URIs separated by commas. Now URIs can be passed in different ways: as before, as a table which contains URI and it's parameters in "param" table, as a table which contains URI strings and URI tables. Also there are different ways to specify properties for URI: in a string which contains URI, after '?' delimiter, in a table which contains URI in "params" table, in "default_params" table if it is default parameters for all URIs. For this purposes new method `parse_many` was implemented in tarantool `uri` library. Also `parse` method was updated to make possible the same as new `parse_many` method but only for single URI. ```lua uri = require('uri') -- Single URI, passed as before uri.parse_many("/tmp/unix.sock") -- Single URI, with query paramters uri.parse_many("/tmp/unix.sock?q1=v1&q2=v2") -- Several URIs with parameters in one string, separated by commas uri.parse_many("/tmp/unix.sock_1?q=v, /tmp/unix.sock_2?q=v") -- Single URI passed in table, with additional parameters, passed -- in "params" table. This parameters overwrite parameters from -- URI string (q1 = "v2" in example below). uri.parse_many({"/tmp/unix.sock?q1=v1", params = {q1 = "v2"}}) -- For parse it's also works now uri.parse({"/tmp/unix.sock?q1=v1", params = {q1 = "v2"}}) -- Several URIs passed in table with default parameters, passed -- in "default_params" table, which are used for parameters, which -- not specified for URI (q3 parameter with "v3" value corresponds -- to all URIs, and used if there is no such parameter in URI). uri.parse_many({ "/tmp/unix.sock_1?q1=v1", { uri = "/tmp/unix.sock_2", params = { q2 = "v2" } }, default_params = { q3 = "v3" } }) ```
Showing
- extra/exports 0 additions, 2 deletionsextra/exports
- src/CMakeLists.txt 1 addition, 0 deletionssrc/CMakeLists.txt
- src/lib/uri/uri.c 48 additions, 7 deletionssrc/lib/uri/uri.c
- src/lib/uri/uri.h 12 additions, 0 deletionssrc/lib/uri/uri.h
- src/lua/init.c 2 additions, 0 deletionssrc/lua/init.c
- src/lua/uri.c 347 additions, 0 deletionssrc/lua/uri.c
- src/lua/uri.h 22 additions, 0 deletionssrc/lua/uri.h
- src/lua/uri.lua 29 additions, 12 deletionssrc/lua/uri.lua
- static-build/test/static-build/exports.test.lua 0 additions, 2 deletionsstatic-build/test/static-build/exports.test.lua
- test/app-tap/uri.test.lua 537 additions, 12 deletionstest/app-tap/uri.test.lua
src/lua/uri.c
0 → 100644
src/lua/uri.h
0 → 100644
This diff is collapsed.
Please register or sign in to comment