diff --git a/src/lib/uri/CMakeLists.txt b/src/lib/uri/CMakeLists.txt
index 5fccca9a0f3e3b80897ef9d8f78a329507515806..efe7b17245458c76d495adcb3f8b230a2b40e8fd 100644
--- a/src/lib/uri/CMakeLists.txt
+++ b/src/lib/uri/CMakeLists.txt
@@ -1,10 +1,10 @@
 add_custom_target(ragel
     WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
-    COMMAND ragel -G2 src/lib/uri/uri.rl -o src/lib/uri/uri.c)
+    COMMAND ragel -G2 src/lib/uri/uri_parser.rl -o src/lib/uri/uri_parser.c)
 
 if (CC_HAS_WNO_IMPLICIT_FALLTHROUGH)
     # Suppress noise warnings for autogenerated Ragel code
-    set_source_files_properties(uri.c PROPERTIES COMPILE_FLAGS
+    set_source_files_properties(uri_parser.c PROPERTIES COMPILE_FLAGS
         -Wno-implicit-fallthrough)
 endif()
-add_library(uri STATIC uri.c)
+add_library(uri STATIC uri_parser.c)
diff --git a/src/lib/uri/uri.h b/src/lib/uri/uri.h
index b74c467f9949ec3d7548116c1b3c0b893d18c42b..ebedcb97e091bb1bf79ef4dd89191c99dacd7221 100644
--- a/src/lib/uri/uri.h
+++ b/src/lib/uri/uri.h
@@ -1,77 +1,8 @@
-#ifndef TARANTOOL_URI_H_INCLUDED
-#define TARANTOOL_URI_H_INCLUDED
 /*
- * Copyright 2010-2016, Tarantool AUTHORS, please see AUTHORS file.
+ * SPDX-License-Identifier: BSD-2-Clause
  *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * 1. Redistributions of source code must retain the above
- *    copyright notice, this list of conditions and the
- *    following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- *    copyright notice, this list of conditions and the following
- *    disclaimer in the documentation and/or other materials
- *    provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * <COPYRIGHT HOLDER> OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
- * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
+ * Copyright 2010-2021, Tarantool AUTHORS, please see AUTHORS file.
  */
+#pragma once
 
-#include <stddef.h>
-#include <stdbool.h>
-#include <netdb.h> /* NI_MAXHOST, NI_MAXSERV */
-#include <limits.h> /* _POSIX_PATH_MAX */
-
-#if defined(__cplusplus)
-extern "C" {
-#endif /* defined(__cplusplus) */
-
-struct uri {
-	const char *scheme;
-	size_t scheme_len;
-	const char *login;
-	size_t login_len;
-	const char *password;
-	size_t password_len;
-	const char *host;
-	size_t host_len;
-	const char *service;
-	size_t service_len;
-	const char *path;
-	size_t path_len;
-	const char *query;
-	size_t query_len;
-	const char *fragment;
-	size_t fragment_len;
-	int host_hint;
-};
-
-#define URI_HOST_UNIX "unix/"
-#define URI_MAXHOST NI_MAXHOST
-#define URI_MAXSERVICE _POSIX_PATH_MAX /* _POSIX_PATH_MAX always > NI_MAXSERV */
-
-int
-uri_parse(struct uri *uri, const char *str);
-
-int
-uri_format(char *str, int len, const struct uri *uri, bool write_password);
-
-#if defined(__cplusplus)
-} /* extern "C" */
-#endif /* defined(__cplusplus) */
-
-#endif /* TARANTOOL_URI_H_INCLUDED */
+#include "uri_parser.h"
diff --git a/src/lib/uri/uri.c b/src/lib/uri/uri_parser.c
similarity index 91%
rename from src/lib/uri/uri.c
rename to src/lib/uri/uri_parser.c
index c00d89e44cdf9aa80eee3d05b9104e49d5a658fa..974acf54d4fd3bb102f3e2fc1ffffe04ece10299 100644
--- a/src/lib/uri/uri.c
+++ b/src/lib/uri/uri_parser.c
@@ -1,5 +1,5 @@
 
-#line 1 "src/lib/uri/uri.rl"
+#line 1 "src/lib/uri/uri_parser.rl"
 /*
  * Copyright 2010-2016, Tarantool AUTHORS, please see AUTHORS file.
  *
@@ -49,7 +49,7 @@ uri_parse(struct uri *uri, const char *p)
 	size_t login_len = 0, scheme_len = 0;
 
 	
-#line 53 "src/lib/uri/uri.c"
+#line 53 "src/lib/uri/uri_parser.c"
 static const int uri_start = 149;
 static const int uri_first_final = 149;
 static const int uri_error = 0;
@@ -57,12 +57,12 @@ static const int uri_error = 0;
 static const int uri_en_main = 149;
 
 
-#line 61 "src/lib/uri/uri.c"
+#line 61 "src/lib/uri/uri_parser.c"
 	{
 	cs = uri_start;
 	}
 
-#line 66 "src/lib/uri/uri.c"
+#line 66 "src/lib/uri/uri_parser.c"
 	{
 	if ( p == pe )
 		goto _test_eof;
@@ -100,16 +100,16 @@ case 149:
 cs = 0;
 	goto _out;
 tr156:
-#line 144 "src/lib/uri/uri.rl"
+#line 144 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st150;
 st150:
 	if ( ++p == pe )
 		goto _test_eof150;
 case 150:
-#line 113 "src/lib/uri/uri.c"
+#line 113 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st150;
 		case 35: goto tr166;
@@ -132,80 +132,80 @@ case 150:
 		goto st150;
 	goto st0;
 tr157:
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st151;
 tr166:
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st151;
 tr177:
-#line 71 "src/lib/uri/uri.rl"
+#line 71 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 72 "src/lib/uri/uri.rl"
+#line 72 "src/lib/uri/uri_parser.rl"
 	{ uri->query = s; uri->query_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st151;
 tr179:
-#line 72 "src/lib/uri/uri.rl"
+#line 72 "src/lib/uri/uri_parser.rl"
 	{ uri->query = s; uri->query_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st151;
 tr182:
-#line 138 "src/lib/uri/uri.rl"
+#line 138 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 139 "src/lib/uri/uri.rl"
+#line 139 "src/lib/uri/uri_parser.rl"
 	{ uri->service = s; uri->service_len = p - s; }
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st151;
 tr193:
-#line 139 "src/lib/uri/uri.rl"
+#line 139 "src/lib/uri/uri_parser.rl"
 	{ uri->service = s; uri->service_len = p - s; }
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st151;
 tr202:
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st151;
 tr220:
-#line 108 "src/lib/uri/uri.rl"
+#line 108 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;
 			   uri->host_hint = 1; }
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st151;
 tr239:
-#line 119 "src/lib/uri/uri.rl"
+#line 119 "src/lib/uri/uri_parser.rl"
 	{
 			/*
 			 * This action is also called for path_* terms.
@@ -221,17 +221,17 @@ case 150:
 				uri->path_len = 0;
 			};
 		}
-#line 170 "src/lib/uri/uri.rl"
+#line 170 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st151;
 tr245:
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 119 "src/lib/uri/uri.rl"
+#line 119 "src/lib/uri/uri_parser.rl"
 	{
 			/*
 			 * This action is also called for path_* terms.
@@ -247,14 +247,14 @@ case 150:
 				uri->path_len = 0;
 			};
 		}
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st151;
 st151:
 	if ( ++p == pe )
 		goto _test_eof151;
 case 151:
-#line 258 "src/lib/uri/uri.c"
+#line 258 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto tr172;
 		case 37: goto tr173;
@@ -273,14 +273,14 @@ case 151:
 		goto tr172;
 	goto st0;
 tr172:
-#line 75 "src/lib/uri/uri.rl"
+#line 75 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st152;
 st152:
 	if ( ++p == pe )
 		goto _test_eof152;
 case 152:
-#line 284 "src/lib/uri/uri.c"
+#line 284 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st152;
 		case 37: goto st1;
@@ -299,14 +299,14 @@ case 152:
 		goto st152;
 	goto st0;
 tr173:
-#line 75 "src/lib/uri/uri.rl"
+#line 75 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st1;
 st1:
 	if ( ++p == pe )
 		goto _test_eof1;
 case 1:
-#line 310 "src/lib/uri/uri.c"
+#line 310 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 37: goto st152;
 		case 117: goto st2;
@@ -373,16 +373,16 @@ case 5:
 		goto st152;
 	goto st0;
 tr158:
-#line 144 "src/lib/uri/uri.rl"
+#line 144 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st6;
 st6:
 	if ( ++p == pe )
 		goto _test_eof6;
 case 6:
-#line 386 "src/lib/uri/uri.c"
+#line 386 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 37: goto st150;
 		case 117: goto st7;
@@ -449,43 +449,43 @@ case 10:
 		goto st150;
 	goto st0;
 tr168:
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st153;
 tr184:
-#line 138 "src/lib/uri/uri.rl"
+#line 138 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 139 "src/lib/uri/uri.rl"
+#line 139 "src/lib/uri/uri_parser.rl"
 	{ uri->service = s; uri->service_len = p - s; }
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st153;
 tr194:
-#line 139 "src/lib/uri/uri.rl"
+#line 139 "src/lib/uri/uri_parser.rl"
 	{ uri->service = s; uri->service_len = p - s; }
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st153;
 tr203:
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st153;
 tr221:
-#line 108 "src/lib/uri/uri.rl"
+#line 108 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;
 			   uri->host_hint = 1; }
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st153;
 st153:
 	if ( ++p == pe )
 		goto _test_eof153;
 case 153:
-#line 489 "src/lib/uri/uri.c"
+#line 489 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st153;
 		case 35: goto tr157;
@@ -575,66 +575,66 @@ case 15:
 		goto st153;
 	goto st0;
 tr162:
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st154;
 tr170:
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st154;
 tr186:
-#line 138 "src/lib/uri/uri.rl"
+#line 138 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 139 "src/lib/uri/uri.rl"
+#line 139 "src/lib/uri/uri_parser.rl"
 	{ uri->service = s; uri->service_len = p - s; }
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st154;
 tr196:
-#line 139 "src/lib/uri/uri.rl"
+#line 139 "src/lib/uri/uri_parser.rl"
 	{ uri->service = s; uri->service_len = p - s; }
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st154;
 tr204:
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st154;
 tr224:
-#line 108 "src/lib/uri/uri.rl"
+#line 108 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;
 			   uri->host_hint = 1; }
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st154;
 tr240:
-#line 119 "src/lib/uri/uri.rl"
+#line 119 "src/lib/uri/uri_parser.rl"
 	{
 			/*
 			 * This action is also called for path_* terms.
@@ -650,17 +650,17 @@ case 15:
 				uri->path_len = 0;
 			};
 		}
-#line 170 "src/lib/uri/uri.rl"
+#line 170 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st154;
 tr247:
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 119 "src/lib/uri/uri.rl"
+#line 119 "src/lib/uri/uri_parser.rl"
 	{
 			/*
 			 * This action is also called for path_* terms.
@@ -676,14 +676,14 @@ case 15:
 				uri->path_len = 0;
 			};
 		}
-#line 195 "src/lib/uri/uri.rl"
+#line 195 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st154;
 st154:
 	if ( ++p == pe )
 		goto _test_eof154;
 case 154:
-#line 687 "src/lib/uri/uri.c"
+#line 687 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto tr176;
 		case 35: goto tr177;
@@ -703,14 +703,14 @@ case 154:
 		goto tr176;
 	goto st0;
 tr176:
-#line 71 "src/lib/uri/uri.rl"
+#line 71 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st155;
 st155:
 	if ( ++p == pe )
 		goto _test_eof155;
 case 155:
-#line 714 "src/lib/uri/uri.c"
+#line 714 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st155;
 		case 35: goto tr179;
@@ -730,14 +730,14 @@ case 155:
 		goto st155;
 	goto st0;
 tr178:
-#line 71 "src/lib/uri/uri.rl"
+#line 71 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st16;
 st16:
 	if ( ++p == pe )
 		goto _test_eof16;
 case 16:
-#line 741 "src/lib/uri/uri.c"
+#line 741 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 37: goto st155;
 		case 117: goto st17;
@@ -804,25 +804,25 @@ case 20:
 		goto st155;
 	goto st0;
 tr169:
-#line 145 "src/lib/uri/uri.rl"
+#line 145 "src/lib/uri/uri_parser.rl"
 	{ login = s; login_len = p - s; }
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
 	goto st156;
 tr261:
-#line 145 "src/lib/uri/uri.rl"
+#line 145 "src/lib/uri/uri_parser.rl"
 	{ login = s; login_len = p - s; }
-#line 108 "src/lib/uri/uri.rl"
+#line 108 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;
 			   uri->host_hint = 1; }
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
 	goto st156;
 st156:
 	if ( ++p == pe )
 		goto _test_eof156;
 case 156:
-#line 826 "src/lib/uri/uri.c"
+#line 826 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto tr181;
 		case 35: goto tr182;
@@ -848,14 +848,14 @@ case 156:
 		goto tr185;
 	goto st0;
 tr181:
-#line 148 "src/lib/uri/uri.rl"
+#line 148 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st21;
 st21:
 	if ( ++p == pe )
 		goto _test_eof21;
 case 21:
-#line 859 "src/lib/uri/uri.c"
+#line 859 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st21;
 		case 37: goto st22;
@@ -878,14 +878,14 @@ case 21:
 		goto st21;
 	goto st0;
 tr183:
-#line 148 "src/lib/uri/uri.rl"
+#line 148 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st22;
 st22:
 	if ( ++p == pe )
 		goto _test_eof22;
 case 22:
-#line 889 "src/lib/uri/uri.c"
+#line 889 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 37: goto st21;
 		case 117: goto st23;
@@ -952,30 +952,30 @@ case 26:
 		goto st21;
 	goto st0;
 tr23:
-#line 149 "src/lib/uri/uri.rl"
+#line 149 "src/lib/uri/uri_parser.rl"
 	{ uri->password = s; uri->password_len = p - s; }
-#line 153 "src/lib/uri/uri.rl"
+#line 153 "src/lib/uri/uri_parser.rl"
 	{ uri->login = login; uri->login_len = login_len; }
 	goto st27;
 tr171:
-#line 145 "src/lib/uri/uri.rl"
+#line 145 "src/lib/uri/uri_parser.rl"
 	{ login = s; login_len = p - s; }
-#line 153 "src/lib/uri/uri.rl"
+#line 153 "src/lib/uri/uri_parser.rl"
 	{ uri->login = login; uri->login_len = login_len; }
 	goto st27;
 tr187:
-#line 148 "src/lib/uri/uri.rl"
+#line 148 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 149 "src/lib/uri/uri.rl"
+#line 149 "src/lib/uri/uri_parser.rl"
 	{ uri->password = s; uri->password_len = p - s; }
-#line 153 "src/lib/uri/uri.rl"
+#line 153 "src/lib/uri/uri_parser.rl"
 	{ uri->login = login; uri->login_len = login_len; }
 	goto st27;
 st27:
 	if ( ++p == pe )
 		goto _test_eof27;
 case 27:
-#line 979 "src/lib/uri/uri.c"
+#line 979 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto tr28;
 		case 37: goto tr29;
@@ -1001,14 +1001,14 @@ case 27:
 		goto tr32;
 	goto st0;
 tr28:
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st157;
 st157:
 	if ( ++p == pe )
 		goto _test_eof157;
 case 157:
-#line 1012 "src/lib/uri/uri.c"
+#line 1012 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st157;
 		case 35: goto tr166;
@@ -1030,14 +1030,14 @@ case 157:
 		goto st157;
 	goto st0;
 tr29:
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st28;
 st28:
 	if ( ++p == pe )
 		goto _test_eof28;
 case 28:
-#line 1041 "src/lib/uri/uri.c"
+#line 1041 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 37: goto st157;
 		case 117: goto st29;
@@ -1104,21 +1104,21 @@ case 32:
 		goto st157;
 	goto st0;
 tr190:
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
 	goto st158;
 tr223:
-#line 108 "src/lib/uri/uri.rl"
+#line 108 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;
 			   uri->host_hint = 1; }
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
 	goto st158;
 st158:
 	if ( ++p == pe )
 		goto _test_eof158;
 case 158:
-#line 1122 "src/lib/uri/uri.c"
+#line 1122 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 35: goto tr182;
 		case 47: goto tr184;
@@ -1134,14 +1134,14 @@ case 158:
 		goto tr192;
 	goto st0;
 tr191:
-#line 138 "src/lib/uri/uri.rl"
+#line 138 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st159;
 st159:
 	if ( ++p == pe )
 		goto _test_eof159;
 case 159:
-#line 1145 "src/lib/uri/uri.c"
+#line 1145 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 35: goto tr193;
 		case 47: goto tr194;
@@ -1151,14 +1151,14 @@ case 159:
 		goto st159;
 	goto st0;
 tr192:
-#line 138 "src/lib/uri/uri.rl"
+#line 138 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st160;
 st160:
 	if ( ++p == pe )
 		goto _test_eof160;
 case 160:
-#line 1162 "src/lib/uri/uri.c"
+#line 1162 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 35: goto tr193;
 		case 47: goto tr194;
@@ -1171,16 +1171,16 @@ case 160:
 		goto st160;
 	goto st0;
 tr30:
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 158 "src/lib/uri/uri.rl"
+#line 158 "src/lib/uri/uri_parser.rl"
 	{ s = p;}
 	goto st161;
 st161:
 	if ( ++p == pe )
 		goto _test_eof161;
 case 161:
-#line 1184 "src/lib/uri/uri.c"
+#line 1184 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st157;
 		case 35: goto tr166;
@@ -1202,20 +1202,20 @@ case 161:
 		goto st157;
 	goto st0;
 tr198:
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st162;
 tr274:
-#line 158 "src/lib/uri/uri.rl"
+#line 158 "src/lib/uri/uri_parser.rl"
 	{ s = p;}
 	goto st162;
 st162:
 	if ( ++p == pe )
 		goto _test_eof162;
 case 162:
-#line 1219 "src/lib/uri/uri.c"
+#line 1219 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st163;
 		case 35: goto tr157;
@@ -1332,7 +1332,7 @@ case 37:
 		goto st163;
 	goto st0;
 tr201:
-#line 119 "src/lib/uri/uri.rl"
+#line 119 "src/lib/uri/uri_parser.rl"
 	{
 			/*
 			 * This action is also called for path_* terms.
@@ -1353,7 +1353,7 @@ case 37:
 	if ( ++p == pe )
 		goto _test_eof164;
 case 164:
-#line 1357 "src/lib/uri/uri.c"
+#line 1357 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st153;
 		case 35: goto tr202;
@@ -1375,16 +1375,16 @@ case 164:
 		goto st153;
 	goto st0;
 tr31:
-#line 158 "src/lib/uri/uri.rl"
+#line 158 "src/lib/uri/uri_parser.rl"
 	{ s = p;}
-#line 192 "src/lib/uri/uri.rl"
+#line 192 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st165;
 st165:
 	if ( ++p == pe )
 		goto _test_eof165;
 case 165:
-#line 1388 "src/lib/uri/uri.c"
+#line 1388 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st166;
 		case 37: goto st38;
@@ -1612,7 +1612,7 @@ case 47:
 		goto st168;
 	goto st0;
 tr207:
-#line 119 "src/lib/uri/uri.rl"
+#line 119 "src/lib/uri/uri_parser.rl"
 	{
 			/*
 			 * This action is also called for path_* terms.
@@ -1633,7 +1633,7 @@ case 47:
 	if ( ++p == pe )
 		goto _test_eof169;
 case 169:
-#line 1637 "src/lib/uri/uri.c"
+#line 1637 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st168;
 		case 35: goto tr202;
@@ -1655,14 +1655,14 @@ case 169:
 		goto st168;
 	goto st0;
 tr209:
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st170;
 st170:
 	if ( ++p == pe )
 		goto _test_eof170;
 case 170:
-#line 1666 "src/lib/uri/uri.c"
+#line 1666 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st170;
 		case 35: goto tr157;
@@ -1752,16 +1752,16 @@ case 52:
 		goto st170;
 	goto st0;
 tr32:
-#line 107 "src/lib/uri/uri.rl"
+#line 107 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st171;
 st171:
 	if ( ++p == pe )
 		goto _test_eof171;
 case 171:
-#line 1765 "src/lib/uri/uri.c"
+#line 1765 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st157;
 		case 35: goto tr166;
@@ -2184,14 +2184,14 @@ case 53:
 		goto tr60;
 	goto st0;
 tr60:
-#line 114 "src/lib/uri/uri.rl"
+#line 114 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st54;
 st54:
 	if ( ++p == pe )
 		goto _test_eof54;
 case 54:
-#line 2195 "src/lib/uri/uri.c"
+#line 2195 "src/lib/uri/uri_parser.c"
 	if ( (*p) == 58 )
 		goto st58;
 	if ( (*p) > 57 ) {
@@ -2742,7 +2742,7 @@ case 97:
 		goto tr68;
 	goto st0;
 tr68:
-#line 115 "src/lib/uri/uri.rl"
+#line 115 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;
 				   uri->host_hint = 2; }
 	goto st186;
@@ -2750,7 +2750,7 @@ case 97:
 	if ( ++p == pe )
 		goto _test_eof186;
 case 186:
-#line 2754 "src/lib/uri/uri.c"
+#line 2754 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 35: goto tr202;
 		case 47: goto tr203;
@@ -2759,14 +2759,14 @@ case 186:
 	}
 	goto st0;
 tr61:
-#line 114 "src/lib/uri/uri.rl"
+#line 114 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st98;
 st98:
 	if ( ++p == pe )
 		goto _test_eof98;
 case 98:
-#line 2770 "src/lib/uri/uri.c"
+#line 2770 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 58: goto st99;
 		case 93: goto tr68;
@@ -2995,14 +2995,14 @@ case 118:
 		goto st72;
 	goto st0;
 tr34:
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st187;
 st187:
 	if ( ++p == pe )
 		goto _test_eof187;
 case 187:
-#line 3006 "src/lib/uri/uri.c"
+#line 3006 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st157;
 		case 35: goto tr166;
@@ -3099,16 +3099,16 @@ case 190:
 		goto st157;
 	goto st0;
 tr233:
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st191;
 st191:
 	if ( ++p == pe )
 		goto _test_eof191;
 case 191:
-#line 3112 "src/lib/uri/uri.c"
+#line 3112 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st153;
 		case 35: goto tr157;
@@ -3155,14 +3155,14 @@ case 192:
 		goto st153;
 	goto st0;
 tr235:
-#line 135 "src/lib/uri/uri.rl"
+#line 135 "src/lib/uri/uri_parser.rl"
 	{ s = p;}
 	goto st193;
 st193:
 	if ( ++p == pe )
 		goto _test_eof193;
 case 193:
-#line 3166 "src/lib/uri/uri.c"
+#line 3166 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st153;
 		case 35: goto tr157;
@@ -3184,14 +3184,14 @@ case 193:
 		goto st153;
 	goto st0;
 tr236:
-#line 135 "src/lib/uri/uri.rl"
+#line 135 "src/lib/uri/uri_parser.rl"
 	{ s = p;}
 	goto st194;
 st194:
 	if ( ++p == pe )
 		goto _test_eof194;
 case 194:
-#line 3195 "src/lib/uri/uri.c"
+#line 3195 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st195;
 		case 35: goto tr157;
@@ -3308,16 +3308,16 @@ case 123:
 		goto st195;
 	goto st0;
 tr185:
-#line 148 "src/lib/uri/uri.rl"
+#line 148 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 138 "src/lib/uri/uri.rl"
+#line 138 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st196;
 st196:
 	if ( ++p == pe )
 		goto _test_eof196;
 case 196:
-#line 3321 "src/lib/uri/uri.c"
+#line 3321 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st21;
 		case 35: goto tr193;
@@ -3343,16 +3343,16 @@ case 196:
 		goto st196;
 	goto st0;
 tr188:
-#line 148 "src/lib/uri/uri.rl"
+#line 148 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 138 "src/lib/uri/uri.rl"
+#line 138 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st197;
 st197:
 	if ( ++p == pe )
 		goto _test_eof197;
 case 197:
-#line 3356 "src/lib/uri/uri.c"
+#line 3356 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st21;
 		case 35: goto tr193;
@@ -3375,18 +3375,18 @@ case 197:
 		goto st197;
 	goto st0;
 tr159:
-#line 144 "src/lib/uri/uri.rl"
+#line 144 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 158 "src/lib/uri/uri.rl"
+#line 158 "src/lib/uri/uri_parser.rl"
 	{ s = p;}
 	goto st198;
 st198:
 	if ( ++p == pe )
 		goto _test_eof198;
 case 198:
-#line 3390 "src/lib/uri/uri.c"
+#line 3390 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st150;
 		case 35: goto tr166;
@@ -3409,20 +3409,20 @@ case 198:
 		goto st150;
 	goto st0;
 tr243:
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st199;
 tr339:
-#line 135 "src/lib/uri/uri.rl"
+#line 135 "src/lib/uri/uri_parser.rl"
 	{ s = p;}
 	goto st199;
 st199:
 	if ( ++p == pe )
 		goto _test_eof199;
 case 199:
-#line 3426 "src/lib/uri/uri.c"
+#line 3426 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st200;
 		case 35: goto tr157;
@@ -3539,16 +3539,16 @@ case 128:
 		goto st200;
 	goto st0;
 tr160:
-#line 158 "src/lib/uri/uri.rl"
+#line 158 "src/lib/uri/uri_parser.rl"
 	{ s = p;}
-#line 192 "src/lib/uri/uri.rl"
+#line 192 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st201;
 st201:
 	if ( ++p == pe )
 		goto _test_eof201;
 case 201:
-#line 3552 "src/lib/uri/uri.c"
+#line 3552 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st202;
 		case 35: goto tr157;
@@ -3692,7 +3692,7 @@ case 203:
 		goto st202;
 	goto st0;
 tr250:
-#line 119 "src/lib/uri/uri.rl"
+#line 119 "src/lib/uri/uri_parser.rl"
 	{
 			/*
 			 * This action is also called for path_* terms.
@@ -3713,7 +3713,7 @@ case 203:
 	if ( ++p == pe )
 		goto _test_eof204;
 case 204:
-#line 3717 "src/lib/uri/uri.c"
+#line 3717 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st170;
 		case 35: goto tr202;
@@ -3735,20 +3735,20 @@ case 204:
 		goto st170;
 	goto st0;
 tr161:
-#line 144 "src/lib/uri/uri.rl"
+#line 144 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 107 "src/lib/uri/uri.rl"
+#line 107 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 188 "src/lib/uri/uri.rl"
+#line 188 "src/lib/uri/uri_parser.rl"
 	{ uri->service = p; }
 	goto st205;
 st205:
 	if ( ++p == pe )
 		goto _test_eof205;
 case 205:
-#line 3752 "src/lib/uri/uri.c"
+#line 3752 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st150;
 		case 35: goto tr166;
@@ -4217,18 +4217,18 @@ case 221:
 	}
 	goto st0;
 tr164:
-#line 160 "src/lib/uri/uri.rl"
+#line 160 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 144 "src/lib/uri/uri.rl"
+#line 144 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st222;
 st222:
 	if ( ++p == pe )
 		goto _test_eof222;
 case 222:
-#line 4232 "src/lib/uri/uri.c"
+#line 4232 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st150;
 		case 35: goto tr166;
@@ -4256,18 +4256,18 @@ case 222:
 		goto st222;
 	goto st0;
 tr268:
-#line 162 "src/lib/uri/uri.rl"
+#line 162 "src/lib/uri/uri_parser.rl"
 	{scheme = s; scheme_len = p - s; }
-#line 145 "src/lib/uri/uri.rl"
+#line 145 "src/lib/uri/uri_parser.rl"
 	{ login = s; login_len = p - s; }
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
 	goto st223;
 st223:
 	if ( ++p == pe )
 		goto _test_eof223;
 case 223:
-#line 4271 "src/lib/uri/uri.c"
+#line 4271 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto tr181;
 		case 35: goto tr182;
@@ -4293,20 +4293,20 @@ case 223:
 		goto tr185;
 	goto st0;
 tr269:
-#line 179 "src/lib/uri/uri.rl"
+#line 179 "src/lib/uri/uri_parser.rl"
 	{ uri->scheme = scheme; uri->scheme_len = scheme_len;}
-#line 138 "src/lib/uri/uri.rl"
+#line 138 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 139 "src/lib/uri/uri.rl"
+#line 139 "src/lib/uri/uri_parser.rl"
 	{ uri->service = s; uri->service_len = p - s; }
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st224;
 st224:
 	if ( ++p == pe )
 		goto _test_eof224;
 case 224:
-#line 4310 "src/lib/uri/uri.c"
+#line 4310 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st153;
 		case 35: goto tr157;
@@ -4361,16 +4361,16 @@ case 225:
 		goto tr275;
 	goto st0;
 tr271:
-#line 144 "src/lib/uri/uri.rl"
+#line 144 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st226;
 st226:
 	if ( ++p == pe )
 		goto _test_eof226;
 case 226:
-#line 4374 "src/lib/uri/uri.c"
+#line 4374 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st226;
 		case 35: goto tr166;
@@ -4394,16 +4394,16 @@ case 226:
 		goto st226;
 	goto st0;
 tr272:
-#line 144 "src/lib/uri/uri.rl"
+#line 144 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st134;
 st134:
 	if ( ++p == pe )
 		goto _test_eof134;
 case 134:
-#line 4407 "src/lib/uri/uri.c"
+#line 4407 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 37: goto st226;
 		case 117: goto st135;
@@ -4470,25 +4470,25 @@ case 138:
 		goto st226;
 	goto st0;
 tr278:
-#line 145 "src/lib/uri/uri.rl"
+#line 145 "src/lib/uri/uri_parser.rl"
 	{ login = s; login_len = p - s; }
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
 	goto st227;
 tr328:
-#line 145 "src/lib/uri/uri.rl"
+#line 145 "src/lib/uri/uri_parser.rl"
 	{ login = s; login_len = p - s; }
-#line 108 "src/lib/uri/uri.rl"
+#line 108 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;
 			   uri->host_hint = 1; }
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
 	goto st227;
 st227:
 	if ( ++p == pe )
 		goto _test_eof227;
 case 227:
-#line 4492 "src/lib/uri/uri.c"
+#line 4492 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto tr280;
 		case 35: goto tr182;
@@ -4516,14 +4516,14 @@ case 227:
 		goto tr282;
 	goto st0;
 tr280:
-#line 148 "src/lib/uri/uri.rl"
+#line 148 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st228;
 st228:
 	if ( ++p == pe )
 		goto _test_eof228;
 case 228:
-#line 4527 "src/lib/uri/uri.c"
+#line 4527 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st228;
 		case 35: goto tr157;
@@ -4547,14 +4547,14 @@ case 228:
 		goto st228;
 	goto st0;
 tr281:
-#line 148 "src/lib/uri/uri.rl"
+#line 148 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st139;
 st139:
 	if ( ++p == pe )
 		goto _test_eof139;
 case 139:
-#line 4558 "src/lib/uri/uri.c"
+#line 4558 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 37: goto st228;
 		case 117: goto st140;
@@ -4621,30 +4621,30 @@ case 143:
 		goto st228;
 	goto st0;
 tr286:
-#line 149 "src/lib/uri/uri.rl"
+#line 149 "src/lib/uri/uri_parser.rl"
 	{ uri->password = s; uri->password_len = p - s; }
-#line 153 "src/lib/uri/uri.rl"
+#line 153 "src/lib/uri/uri_parser.rl"
 	{ uri->login = login; uri->login_len = login_len; }
 	goto st229;
 tr279:
-#line 145 "src/lib/uri/uri.rl"
+#line 145 "src/lib/uri/uri_parser.rl"
 	{ login = s; login_len = p - s; }
-#line 153 "src/lib/uri/uri.rl"
+#line 153 "src/lib/uri/uri_parser.rl"
 	{ uri->login = login; uri->login_len = login_len; }
 	goto st229;
 tr283:
-#line 148 "src/lib/uri/uri.rl"
+#line 148 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 149 "src/lib/uri/uri.rl"
+#line 149 "src/lib/uri/uri_parser.rl"
 	{ uri->password = s; uri->password_len = p - s; }
-#line 153 "src/lib/uri/uri.rl"
+#line 153 "src/lib/uri/uri_parser.rl"
 	{ uri->login = login; uri->login_len = login_len; }
 	goto st229;
 st229:
 	if ( ++p == pe )
 		goto _test_eof229;
 case 229:
-#line 4648 "src/lib/uri/uri.c"
+#line 4648 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto tr287;
 		case 35: goto tr157;
@@ -4675,14 +4675,14 @@ case 229:
 		goto tr290;
 	goto st0;
 tr287:
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st230;
 st230:
 	if ( ++p == pe )
 		goto _test_eof230;
 case 230:
-#line 4686 "src/lib/uri/uri.c"
+#line 4686 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st230;
 		case 35: goto tr166;
@@ -4706,14 +4706,14 @@ case 230:
 		goto st230;
 	goto st0;
 tr288:
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st144;
 st144:
 	if ( ++p == pe )
 		goto _test_eof144;
 case 144:
-#line 4717 "src/lib/uri/uri.c"
+#line 4717 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 37: goto st230;
 		case 117: goto st145;
@@ -4780,21 +4780,21 @@ case 148:
 		goto st230;
 	goto st0;
 tr293:
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
 	goto st231;
 tr308:
-#line 108 "src/lib/uri/uri.rl"
+#line 108 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;
 			   uri->host_hint = 1; }
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
 	goto st231;
 st231:
 	if ( ++p == pe )
 		goto _test_eof231;
 case 231:
-#line 4798 "src/lib/uri/uri.c"
+#line 4798 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st153;
 		case 35: goto tr182;
@@ -4823,14 +4823,14 @@ case 231:
 		goto st153;
 	goto st0;
 tr294:
-#line 138 "src/lib/uri/uri.rl"
+#line 138 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st232;
 st232:
 	if ( ++p == pe )
 		goto _test_eof232;
 case 232:
-#line 4834 "src/lib/uri/uri.c"
+#line 4834 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st153;
 		case 35: goto tr193;
@@ -4858,14 +4858,14 @@ case 232:
 		goto st153;
 	goto st0;
 tr295:
-#line 138 "src/lib/uri/uri.rl"
+#line 138 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st233;
 st233:
 	if ( ++p == pe )
 		goto _test_eof233;
 case 233:
-#line 4869 "src/lib/uri/uri.c"
+#line 4869 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st153;
 		case 35: goto tr193;
@@ -4888,16 +4888,16 @@ case 233:
 		goto st233;
 	goto st0;
 tr289:
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 158 "src/lib/uri/uri.rl"
+#line 158 "src/lib/uri/uri_parser.rl"
 	{ s = p;}
 	goto st234;
 st234:
 	if ( ++p == pe )
 		goto _test_eof234;
 case 234:
-#line 4901 "src/lib/uri/uri.c"
+#line 4901 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st230;
 		case 35: goto tr166;
@@ -4921,16 +4921,16 @@ case 234:
 		goto st230;
 	goto st0;
 tr290:
-#line 107 "src/lib/uri/uri.rl"
+#line 107 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st235;
 st235:
 	if ( ++p == pe )
 		goto _test_eof235;
 case 235:
-#line 4934 "src/lib/uri/uri.c"
+#line 4934 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st230;
 		case 35: goto tr166;
@@ -5371,14 +5371,14 @@ case 249:
 		goto st230;
 	goto st0;
 tr291:
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st250;
 st250:
 	if ( ++p == pe )
 		goto _test_eof250;
 case 250:
-#line 5382 "src/lib/uri/uri.c"
+#line 5382 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st230;
 		case 35: goto tr166;
@@ -5483,16 +5483,16 @@ case 253:
 		goto st230;
 	goto st0;
 tr282:
-#line 148 "src/lib/uri/uri.rl"
+#line 148 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 138 "src/lib/uri/uri.rl"
+#line 138 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st254;
 st254:
 	if ( ++p == pe )
 		goto _test_eof254;
 case 254:
-#line 5496 "src/lib/uri/uri.c"
+#line 5496 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st228;
 		case 35: goto tr193;
@@ -5520,16 +5520,16 @@ case 254:
 		goto st254;
 	goto st0;
 tr284:
-#line 148 "src/lib/uri/uri.rl"
+#line 148 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 138 "src/lib/uri/uri.rl"
+#line 138 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st255;
 st255:
 	if ( ++p == pe )
 		goto _test_eof255;
 case 255:
-#line 5533 "src/lib/uri/uri.c"
+#line 5533 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st228;
 		case 35: goto tr193;
@@ -5553,18 +5553,18 @@ case 255:
 		goto st255;
 	goto st0;
 tr273:
-#line 144 "src/lib/uri/uri.rl"
+#line 144 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 158 "src/lib/uri/uri.rl"
+#line 158 "src/lib/uri/uri_parser.rl"
 	{ s = p;}
 	goto st256;
 st256:
 	if ( ++p == pe )
 		goto _test_eof256;
 case 256:
-#line 5568 "src/lib/uri/uri.c"
+#line 5568 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st226;
 		case 35: goto tr166;
@@ -5588,18 +5588,18 @@ case 256:
 		goto st226;
 	goto st0;
 tr275:
-#line 144 "src/lib/uri/uri.rl"
+#line 144 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 107 "src/lib/uri/uri.rl"
+#line 107 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st257;
 st257:
 	if ( ++p == pe )
 		goto _test_eof257;
 case 257:
-#line 5603 "src/lib/uri/uri.c"
+#line 5603 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st226;
 		case 35: goto tr166;
@@ -6040,16 +6040,16 @@ case 271:
 		goto st226;
 	goto st0;
 tr276:
-#line 144 "src/lib/uri/uri.rl"
+#line 144 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st272;
 st272:
 	if ( ++p == pe )
 		goto _test_eof272;
 case 272:
-#line 6053 "src/lib/uri/uri.c"
+#line 6053 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st226;
 		case 35: goto tr166;
@@ -6154,16 +6154,16 @@ case 275:
 		goto st226;
 	goto st0;
 tr336:
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st276;
 st276:
 	if ( ++p == pe )
 		goto _test_eof276;
 case 276:
-#line 6167 "src/lib/uri/uri.c"
+#line 6167 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st153;
 		case 35: goto tr157;
@@ -6210,14 +6210,14 @@ case 277:
 		goto st153;
 	goto st0;
 tr338:
-#line 135 "src/lib/uri/uri.rl"
+#line 135 "src/lib/uri/uri_parser.rl"
 	{ s = p;}
 	goto st278;
 st278:
 	if ( ++p == pe )
 		goto _test_eof278;
 case 278:
-#line 6221 "src/lib/uri/uri.c"
+#line 6221 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st153;
 		case 35: goto tr157;
@@ -6239,18 +6239,18 @@ case 278:
 		goto st153;
 	goto st0;
 tr165:
-#line 160 "src/lib/uri/uri.rl"
+#line 160 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 144 "src/lib/uri/uri.rl"
+#line 144 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 100 "src/lib/uri/uri.rl"
+#line 100 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
 	goto st279;
 st279:
 	if ( ++p == pe )
 		goto _test_eof279;
 case 279:
-#line 6254 "src/lib/uri/uri.c"
+#line 6254 "src/lib/uri/uri_parser.c"
 	switch( (*p) ) {
 		case 33: goto st150;
 		case 35: goto tr166;
@@ -6658,18 +6658,18 @@ case 282:
 	{
 	switch ( cs ) {
 	case 155: 
-#line 72 "src/lib/uri/uri.rl"
+#line 72 "src/lib/uri/uri_parser.rl"
 	{ uri->query = s; uri->query_len = p - s; }
 	break;
 	case 152: 
-#line 76 "src/lib/uri/uri.rl"
+#line 76 "src/lib/uri/uri_parser.rl"
 	{ uri->fragment = s; uri->fragment_len = p - s; }
 	break;
 	case 165: 
 	case 166: 
 	case 167: 
 	case 168: 
-#line 119 "src/lib/uri/uri.rl"
+#line 119 "src/lib/uri/uri_parser.rl"
 	{
 			/*
 			 * This action is also called for path_* terms.
@@ -6703,26 +6703,26 @@ case 282:
 	case 276: 
 	case 277: 
 	case 278: 
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
 	break;
 	case 154: 
-#line 71 "src/lib/uri/uri.rl"
+#line 71 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 72 "src/lib/uri/uri.rl"
+#line 72 "src/lib/uri/uri_parser.rl"
 	{ uri->query = s; uri->query_len = p - s; }
 	break;
 	case 151: 
-#line 75 "src/lib/uri/uri.rl"
+#line 75 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 76 "src/lib/uri/uri.rl"
+#line 76 "src/lib/uri/uri_parser.rl"
 	{ uri->fragment = s; uri->fragment_len = p - s; }
 	break;
 	case 164: 
 	case 186: 
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
 	break;
 	case 170: 
@@ -6730,9 +6730,9 @@ case 282:
 	case 201: 
 	case 202: 
 	case 203: 
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 119 "src/lib/uri/uri.rl"
+#line 119 "src/lib/uri/uri_parser.rl"
 	{
 			/*
 			 * This action is also called for path_* terms.
@@ -6819,15 +6819,15 @@ case 282:
 	case 280: 
 	case 281: 
 	case 282: 
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
 	break;
 	case 195: 
-#line 119 "src/lib/uri/uri.rl"
+#line 119 "src/lib/uri/uri_parser.rl"
 	{
 			/*
 			 * This action is also called for path_* terms.
@@ -6843,9 +6843,9 @@ case 282:
 				uri->path_len = 0;
 			};
 		}
-#line 170 "src/lib/uri/uri.rl"
+#line 170 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
 	break;
 	case 159: 
@@ -6856,20 +6856,20 @@ case 282:
 	case 233: 
 	case 254: 
 	case 255: 
-#line 139 "src/lib/uri/uri.rl"
+#line 139 "src/lib/uri/uri_parser.rl"
 	{ uri->service = s; uri->service_len = p - s; }
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
 	break;
 	case 169: 
 	case 204: 
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 119 "src/lib/uri/uri.rl"
+#line 119 "src/lib/uri/uri_parser.rl"
 	{
 			/*
 			 * This action is also called for path_* terms.
@@ -6890,13 +6890,13 @@ case 282:
 	case 218: 
 	case 219: 
 	case 220: 
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
-#line 189 "src/lib/uri/uri.rl"
+#line 189 "src/lib/uri/uri_parser.rl"
 	{ uri->service_len = p - uri->service;
 			   uri->host = NULL; uri->host_len = 0; }
 	break;
@@ -6912,14 +6912,14 @@ case 282:
 	case 263: 
 	case 264: 
 	case 265: 
-#line 108 "src/lib/uri/uri.rl"
+#line 108 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;
 			   uri->host_hint = 1; }
-#line 101 "src/lib/uri/uri.rl"
+#line 101 "src/lib/uri/uri_parser.rl"
 	{ uri->host = s; uri->host_len = p - s;}
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
 	break;
 	case 156: 
@@ -6927,23 +6927,23 @@ case 282:
 	case 223: 
 	case 227: 
 	case 231: 
-#line 138 "src/lib/uri/uri.rl"
+#line 138 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 139 "src/lib/uri/uri.rl"
+#line 139 "src/lib/uri/uri_parser.rl"
 	{ uri->service = s; uri->service_len = p - s; }
-#line 171 "src/lib/uri/uri.rl"
+#line 171 "src/lib/uri/uri_parser.rl"
 	{ s = p; }
-#line 175 "src/lib/uri/uri.rl"
+#line 175 "src/lib/uri/uri_parser.rl"
 	{ uri->path = s; uri->path_len = p - s; }
 	break;
-#line 6940 "src/lib/uri/uri.c"
+#line 6940 "src/lib/uri/uri_parser.c"
 	}
 	}
 
 	_out: {}
 	}
 
-#line 202 "src/lib/uri/uri.rl"
+#line 202 "src/lib/uri/uri_parser.rl"
 
 
 	if (uri->path_len == 0)
diff --git a/src/lib/uri/uri_parser.h b/src/lib/uri/uri_parser.h
new file mode 100644
index 0000000000000000000000000000000000000000..8fce503bd485d2ae00b2e968fa976b76790f0540
--- /dev/null
+++ b/src/lib/uri/uri_parser.h
@@ -0,0 +1,49 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright 2010-2021, Tarantool AUTHORS, please see AUTHORS file.
+ */
+#pragma once
+
+#include <stddef.h>
+#include <stdbool.h>
+#include <netdb.h> /* NI_MAXHOST, NI_MAXSERV */
+#include <limits.h> /* _POSIX_PATH_MAX */
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+struct uri {
+	const char *scheme;
+	size_t scheme_len;
+	const char *login;
+	size_t login_len;
+	const char *password;
+	size_t password_len;
+	const char *host;
+	size_t host_len;
+	const char *service;
+	size_t service_len;
+	const char *path;
+	size_t path_len;
+	const char *query;
+	size_t query_len;
+	const char *fragment;
+	size_t fragment_len;
+	int host_hint;
+};
+
+#define URI_HOST_UNIX "unix/"
+#define URI_MAXHOST NI_MAXHOST
+#define URI_MAXSERVICE _POSIX_PATH_MAX /* _POSIX_PATH_MAX always > NI_MAXSERV */
+
+int
+uri_parse(struct uri *uri, const char *str);
+
+int
+uri_format(char *str, int len, const struct uri *uri, bool write_password);
+
+#if defined(__cplusplus)
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
diff --git a/src/lib/uri/uri.rl b/src/lib/uri/uri_parser.rl
similarity index 100%
rename from src/lib/uri/uri.rl
rename to src/lib/uri/uri_parser.rl
diff --git a/test/app-tap/uri.test.lua b/test/app-tap/uri.test.lua
index 99484a39b32930d6b9c33c494622e74dfccf0713..03ff724de24916db8ad9275f257b3625222d371b 100755
--- a/test/app-tap/uri.test.lua
+++ b/test/app-tap/uri.test.lua
@@ -5,7 +5,7 @@ local uri = require('uri')
 
 local function test_parse(test)
     -- Tests for uri.parse() Lua bindings.
-    -- Parser itself is tested by test/unit/uri unit test.
+    -- Parser itself is tested by test/unit/uri_parser unit test.
     test:plan(54)
 
     local u
diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt
index a1776cc76c54db6f7def7e85c640ca204df283da..fbba64bd2c056172661e48eea5aa405a0233c6d1 100644
--- a/test/unit/CMakeLists.txt
+++ b/test/unit/CMakeLists.txt
@@ -24,8 +24,8 @@ add_executable(heap_iterator.test heap_iterator.c)
 target_link_libraries(heap_iterator.test unit)
 add_executable(stailq.test stailq.c)
 target_link_libraries(stailq.test unit)
-add_executable(uri.test uri.c unit.c)
-target_link_libraries(uri.test uri unit)
+add_executable(uri_parser.test uri_parser.c unit.c)
+target_link_libraries(uri_parser.test uri unit)
 add_executable(queue.test queue.c)
 add_executable(mhash.test mhash.c)
 target_link_libraries(mhash.test unit)
diff --git a/test/unit/uri.c b/test/unit/uri_parser.c
similarity index 100%
rename from test/unit/uri.c
rename to test/unit/uri_parser.c
diff --git a/test/unit/uri.result b/test/unit/uri_parser.result
similarity index 100%
rename from test/unit/uri.result
rename to test/unit/uri_parser.result