38 lines
1.0 KiB
C
38 lines
1.0 KiB
C
#ifndef LNM_HTTP_ROUTER_INTERNAL
|
|
#define LNM_HTTP_ROUTER_INTERNAL
|
|
|
|
#include "lnm/common.h"
|
|
#include "lnm/http/consts.h"
|
|
#include "lnm/http/router.h"
|
|
|
|
typedef struct lnm_http_route_segment_trie {
|
|
struct lnm_http_route_segment_trie *children[128];
|
|
size_t index;
|
|
bool represents_segment;
|
|
} lnm_http_route_segment_trie;
|
|
|
|
lnm_err lnm_http_route_segment_trie_init(lnm_http_route_segment_trie **out);
|
|
|
|
void lnm_http_route_segment_trie_free(lnm_http_route_segment_trie *trie);
|
|
|
|
lnm_err lnm_http_route_key_segment_insert(lnm_http_route *route,
|
|
const char *key, size_t key_len,
|
|
size_t index);
|
|
|
|
struct lnm_http_route {
|
|
lnm_http_route_segment_trie *key_segments;
|
|
};
|
|
|
|
struct lnm_http_router {
|
|
struct lnm_http_router *exact_children[128];
|
|
struct lnm_http_router *single_segment_child;
|
|
lnm_http_route *routes[lnm_http_method_total];
|
|
bool represents_route;
|
|
};
|
|
|
|
lnm_err lnm_http_route_init(lnm_http_route **out);
|
|
|
|
void lnm_http_route_free(lnm_http_route *route);
|
|
|
|
#endif
|