refactor(routing): simply key segment api
parent
9dbdb0b089
commit
d739157fb1
|
@ -49,7 +49,7 @@ lnm_http_route_err lnm_http_router_route(lnm_http_route_match *out,
|
|||
lnm_http_method method,
|
||||
const char *path);
|
||||
|
||||
lnm_err lnm_http_route_match_get(lnm_http_route_match_segment **out,
|
||||
lnm_http_route_match *match, const char *key);
|
||||
const lnm_http_route_match_segment *
|
||||
lnm_http_route_match_get(lnm_http_route_match *match, const char *key);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -56,9 +56,7 @@ void lnm_http_route_segment_trie_free(lnm_http_route_segment_trie *trie) {
|
|||
}
|
||||
|
||||
for (size_t i = 0; i < 128; i++) {
|
||||
if (trie->children[i] != NULL) {
|
||||
lnm_http_route_segment_trie_free(trie->children[i]);
|
||||
}
|
||||
lnm_http_route_segment_trie_free(trie->children[i]);
|
||||
}
|
||||
|
||||
free(trie);
|
||||
|
@ -94,8 +92,8 @@ lnm_err lnm_http_route_key_segment_insert(lnm_http_route *route,
|
|||
}
|
||||
|
||||
static bool is_ascii(const char *s) {
|
||||
while (*s != '0') {
|
||||
if (*s > 127) {
|
||||
while (*s != '\0') {
|
||||
if (*s < 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -269,10 +267,10 @@ lnm_http_route_err lnm_http_router_route(lnm_http_route_match *out,
|
|||
return __lnm_http_router_route(out, router, method, path, 0, 0);
|
||||
}
|
||||
|
||||
lnm_err lnm_http_route_match_get(lnm_http_route_match_segment **out,
|
||||
lnm_http_route_match *match, const char *key) {
|
||||
const lnm_http_route_match_segment *
|
||||
lnm_http_route_match_get(lnm_http_route_match *match, const char *key) {
|
||||
if (match->route->key_segments == NULL) {
|
||||
return lnm_err_not_found;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
lnm_http_route_segment_trie *trie = match->route->key_segments;
|
||||
|
@ -281,17 +279,15 @@ lnm_err lnm_http_route_match_get(lnm_http_route_match_segment **out,
|
|||
trie = trie->children[(unsigned char)*key];
|
||||
|
||||
if (trie == NULL) {
|
||||
return lnm_err_not_found;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
key++;
|
||||
}
|
||||
|
||||
if (!trie->represents_segment) {
|
||||
return lnm_err_not_found;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
*out = &match->key_segments[trie->index];
|
||||
|
||||
return lnm_err_ok;
|
||||
return &match->key_segments[trie->index];
|
||||
}
|
||||
|
|
|
@ -29,12 +29,12 @@ void test_routing_simple() {
|
|||
TEST_CHECK(match.key_segments[1].start == 15);
|
||||
TEST_CHECK(match.key_segments[1].len == 9);
|
||||
|
||||
lnm_http_route_match_segment *segment;
|
||||
TEST_CHECK(lnm_http_route_match_get(&segment, &match, "second") == lnm_err_ok);
|
||||
const lnm_http_route_match_segment *segment;
|
||||
TEST_CHECK((segment = lnm_http_route_match_get(&match, "second")) != NULL);
|
||||
TEST_CHECK(segment->start == 15);
|
||||
TEST_CHECK(segment->len == 9);
|
||||
TEST_CHECK(lnm_http_route_match_get(&segment, &match, "yuhh") == lnm_err_not_found);
|
||||
TEST_CHECK(lnm_http_route_match_get(&segment, &match, "hello") == lnm_err_ok);
|
||||
TEST_CHECK((segment = lnm_http_route_match_get(&match, "yuhh")) == NULL);
|
||||
TEST_CHECK((segment = lnm_http_route_match_get(&match, "hello")) != NULL);
|
||||
TEST_CHECK(segment->start == 6);
|
||||
TEST_CHECK(segment->len == 8);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue