#include <iri.h>
+#include <cstring>
#include <memory>
namespace parser {
std::unique_ptr<iri_struct, decltype(&iri_destroy)> iri(
iri_parse(iri_string.c_str()), iri_destroy);
return
- iri != NULL &&
- iri->scheme != NULL && (
- iri->display != NULL ||
- iri->user != NULL ||
- iri->auth != NULL ||
- iri->password != NULL ||
- iri->host != NULL ||
- iri->path != NULL ||
- iri->query != NULL ||
- iri->anchor != NULL ||
- iri->qparams != NULL ||
- iri->schemelist != NULL);
+ iri != nullptr &&
+ iri->scheme != nullptr && (
+ iri->display != nullptr ||
+ iri->user != nullptr ||
+ iri->auth != nullptr ||
+ iri->password != nullptr ||
+ (iri->host != nullptr && strlen(iri->host) > 0) ||
+ iri->path != nullptr ||
+ iri->query != nullptr ||
+ iri->anchor != nullptr ||
+ iri->qparams != nullptr ||
+ iri->schemelist != nullptr);
+}
+
+bool IsValidWarpIRI(const std::string& iri_string) {
+ std::unique_ptr<iri_struct, decltype(&iri_destroy)> iri(
+ iri_parse(iri_string.c_str()), iri_destroy);
+ return
+ iri != nullptr &&
+ (iri->host != nullptr && strlen(iri->host) > 0) &&
+ iri->scheme != nullptr &&
+ iri->display == nullptr &&
+ iri->user == nullptr &&
+ iri->auth == nullptr &&
+ iri->password == nullptr &&
+ iri->path == nullptr &&
+ iri->query == nullptr &&
+ iri->anchor == nullptr;
}
} // namespace utils
*/
bool IsValidIRI(const std::string& iri_string);
+/**
+ * @brief IsValidWarpIRI
+ * Validate IRI with libiri and check according to WARP spec
+ * requirements.
+ *
+ * Valid WARP IRI is the one that:
+ * - is valid IRI,
+ * - has no other component that scheme and iauthority,
+ * - has host component,
+ * - has no iuser component.
+ *
+ * @param iri_string iri string to check
+ * @return bool if iri is valid
+ */
+bool IsValidWarpIRI(const std::string& iri_string);
+
} // namespace utils
} // namespace parser