#ifndef AWS_COMMON_URI_H
#define AWS_COMMON_URI_H
#include <aws/common/byte_buf.h>
struct aws_uri {
size_t self_size;
struct aws_allocator *allocator;
struct aws_byte_buf uri_str;
struct aws_byte_cursor scheme;
struct aws_byte_cursor authority;
struct aws_byte_cursor userinfo;
struct aws_byte_cursor user;
struct aws_byte_cursor password;
struct aws_byte_cursor host_name;
uint16_t port;
struct aws_byte_cursor path;
struct aws_byte_cursor query_string;
struct aws_byte_cursor path_and_query;
};
struct aws_uri_param {
struct aws_byte_cursor key;
struct aws_byte_cursor value;
};
struct aws_uri_builder_options {
struct aws_byte_cursor scheme;
struct aws_byte_cursor path;
struct aws_byte_cursor host_name;
uint16_t port;
struct aws_array_list *query_params;
struct aws_byte_cursor query_string;
};
AWS_EXTERN_C_BEGIN
AWS_COMMON_API int aws_uri_init_parse(
struct aws_uri *uri,
struct aws_allocator *allocator,
const struct aws_byte_cursor *uri_str);
AWS_COMMON_API int aws_uri_init_from_builder_options(
struct aws_uri *uri,
struct aws_allocator *allocator,
struct aws_uri_builder_options *options);
AWS_COMMON_API void aws_uri_clean_up(struct aws_uri *uri);
AWS_COMMON_API const struct aws_byte_cursor *aws_uri_scheme(const struct aws_uri *uri);
AWS_COMMON_API const struct aws_byte_cursor *aws_uri_authority(const struct aws_uri *uri);
AWS_COMMON_API const struct aws_byte_cursor *aws_uri_path(const struct aws_uri *uri);
AWS_COMMON_API const struct aws_byte_cursor *aws_uri_query_string(const struct aws_uri *uri);
AWS_COMMON_API const struct aws_byte_cursor *aws_uri_host_name(const struct aws_uri *uri);
AWS_COMMON_API uint16_t aws_uri_port(const struct aws_uri *uri);
AWS_COMMON_API const struct aws_byte_cursor *aws_uri_path_and_query(const struct aws_uri *uri);
AWS_COMMON_API bool aws_uri_query_string_next_param(const struct aws_uri *uri, struct aws_uri_param *param);
AWS_COMMON_API int aws_uri_query_string_params(const struct aws_uri *uri, struct aws_array_list *out_params);
AWS_COMMON_API int aws_byte_buf_append_encoding_uri_path(
struct aws_byte_buf *buffer,
const struct aws_byte_cursor *cursor);
AWS_COMMON_API int aws_byte_buf_append_encoding_uri_param(
struct aws_byte_buf *buffer,
const struct aws_byte_cursor *cursor);
AWS_COMMON_API int aws_byte_buf_append_decoding_uri(struct aws_byte_buf *buffer, const struct aws_byte_cursor *cursor);
AWS_EXTERN_C_END
#endif