Static assets finally

This commit is contained in:
kamkow1
2025-06-22 14:57:24 +02:00
parent e04e6c135e
commit a7f8ebea09
7 changed files with 185 additions and 60 deletions

View File

@ -16,7 +16,7 @@
void make_internal_server_error(Route_Result *result)
{
result->status_code = 500;
result->type = ROUTE_RESULT_TEXT;
result->type = ROUTE_RESULT_DYNAMIC;
list_append(&result->headers, "Content-Type: text/plain");
sb_append_nstr(&result->body, INTERNAL_SERVER_ERROR_MSG);
sb_finish(&result->body);
@ -28,7 +28,7 @@ void make_application_json(Route_Result *result, int code, cJSON *root)
defer { free(root_text); }
result->status_code = code;
result->type = ROUTE_RESULT_TEXT;
result->type = ROUTE_RESULT_DYNAMIC;
list_append(&result->headers, clonestr("Content-Type: application/json"));
sb_append_nstr(&result->body, root_text);
sb_finish(&result->body);
@ -39,7 +39,7 @@ void make_binary(Route_Result *result, char *content_type, int code, char *data,
char type[100];
snprintf(type, sizeof(type), "Content-Type: %s", content_type);
result->status_code = code;
result->type = ROUTE_RESULT_BINARY;
result->type = ROUTE_RESULT_DYNAMIC;
list_append(&result->headers, clonestr(type));
for (size_t i = 0; i < size; i++) {
sb_append_char(&result->body, data[i]);
@ -53,7 +53,7 @@ void make_text(Route_Result *result, char *subtype, int code, char *in)
snprintf(type, sizeof(type), "Content-Type: text/%s", subtype);
result->status_code = code;
result->type = ROUTE_RESULT_TEXT;
result->type = ROUTE_RESULT_DYNAMIC;
list_append(&result->headers, clonestr(type));
sb_append_nstr(&result->body, in);
sb_finish(&result->body);
@ -323,6 +323,15 @@ ROUTE_HANDLER(generic_blog)
}
}
void collect_blogs(Baked_Resource *resource, void *udata)
{
struct { Arena *tmp; String_Builder *sb; } *ud = udata;
if ((strlen(resource->key) >= strlen("blog-"))
&& strncmp(resource->key, "blog-", strlen("blog-")) == 0) {
sb_append_nstr_alloc(ud->tmp, ud->sb, fmt("<li><a href=\"/%s\">%s</a></li>", resource->key, resource->key));
}
}
ROUTE_HANDLER(blog)
{
NString_List env = {0};
@ -335,15 +344,11 @@ ROUTE_HANDLER(blog)
defer { arena_destroy(&tmp); }
String_Builder sb = {0};
void collect_blogs(Baked_Resource *resource)
{
if ((strlen(resource->key) >= strlen("blog-"))
&& strncmp(resource->key, "blog-", strlen("blog-")) == 0) {
sb_append_nstr_alloc(&tmp, &sb, fmt("<li><a href=\"/%s\">%s</a></li>", resource->key, resource->key));
}
}
baked_resource_each(&collect_blogs);
struct { Arena *tmp; String_Builder *sb; } collect_blogs_data = {
.tmp = &tmp,
.sb = &sb,
};
baked_resource_each(&collect_blogs, &collect_blogs_data);
sb_finish_alloc(&tmp, &sb);
list_append(&env, fmt("-DBLOG_POSTS=%s", sb.items));