diff --git a/include/ada_c.h b/include/ada_c.h index 0d01e57c4..a8abd1e4a 100644 --- a/include/ada_c.h +++ b/include/ada_c.h @@ -69,6 +69,7 @@ ada_string ada_get_pathname(ada_url result); ada_string ada_get_search(ada_url result); ada_string ada_get_protocol(ada_url result); uint8_t ada_get_host_type(ada_url result); +uint8_t ada_get_schema_type(ada_url result); // url_aggregator setters // if ada_is_valid(result)) is false, the setters have no effect diff --git a/src/ada_c.cpp b/src/ada_c.cpp index 8e7f46dda..111a2e8d8 100644 --- a/src/ada_c.cpp +++ b/src/ada_c.cpp @@ -218,6 +218,14 @@ uint8_t ada_get_host_type(ada_url result) noexcept { return r->host_type; } +uint8_t ada_get_schema_type(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return 0; + } + return r->type; +} + bool ada_set_href(ada_url result, const char* input, size_t length) noexcept { ada::result& r = get_instance(result); if (!r) { diff --git a/tests/ada_c.cpp b/tests/ada_c.cpp index f0537aadc..b1f6a77db 100644 --- a/tests/ada_c.cpp +++ b/tests/ada_c.cpp @@ -209,3 +209,52 @@ TEST(ada_c, ada_clear_search) { ada_free(out); SUCCEED(); } + +TEST(ada_c, ada_get_schema_type) { + std::string_view input; + ada_url out; + + input = "http://www.google.com"; + out = ada_parse(input.data(), input.size()); + ASSERT_TRUE(ada_is_valid(out)); + ASSERT_EQ(ada_get_schema_type(out), 0); + + input = "notspecial://www.google.com"; + ada_free(out); + out = ada_parse(input.data(), input.size()); + ASSERT_TRUE(ada_is_valid(out)); + ASSERT_EQ(ada_get_schema_type(out), 1); + + input = "https://www.google.com"; + ada_free(out); + out = ada_parse(input.data(), input.size()); + ASSERT_TRUE(ada_is_valid(out)); + ASSERT_EQ(ada_get_schema_type(out), 2); + + input = "ws://www.google.com/ws"; + ada_free(out); + out = ada_parse(input.data(), input.size()); + ASSERT_TRUE(ada_is_valid(out)); + ASSERT_EQ(ada_get_schema_type(out), 3); + + input = "ftp://www.google.com/file.txt"; + ada_free(out); + out = ada_parse(input.data(), input.size()); + ASSERT_TRUE(ada_is_valid(out)); + ASSERT_EQ(ada_get_schema_type(out), 4); + + input = "wss://www.google.com/wss"; + ada_free(out); + out = ada_parse(input.data(), input.size()); + ASSERT_TRUE(ada_is_valid(out)); + ASSERT_EQ(ada_get_schema_type(out), 5); + + input = "file:///foo/bar"; + ada_free(out); + out = ada_parse(input.data(), input.size()); + ASSERT_TRUE(ada_is_valid(out)); + ASSERT_EQ(ada_get_schema_type(out), 6); + + ada_free(out); + SUCCEED(); +}