Csilk 0.2.1
A lightweight, high-performance C HTTP web framework
Loading...
Searching...
No Matches
app.h
Go to the documentation of this file.
1
38#ifndef CSILK_APP_H
39#define CSILK_APP_H
40
41#include "csilk/csilk.h"
42
44typedef struct csilk_app_s csilk_app_t;
45
46/* ---- Lifecycle ---- */
47
58csilk_app_t* csilk_app_new(const char* config_path);
59
66void csilk_app_free(csilk_app_t* app);
67
68/* ---- Logger ---- */
69
73void csilk_app_log_level(csilk_app_t* app, csilk_log_level_t level);
74
79void csilk_app_log_file(csilk_app_t* app, const char* path, size_t max_sz);
80
84void csilk_app_log_json(csilk_app_t* app, int enable);
85
86/* ---- Middleware ---- */
87
96void csilk_app_use(csilk_app_t* app, csilk_handler_t h);
97
107void csilk_app_use_group(csilk_app_t* app, const char* prefix, csilk_handler_t h);
108
117void csilk_app_apply_config(csilk_app_t* app);
118
119/* ---- Routes ---- */
120
126void csilk_app_add_route(csilk_app_t* app,
127 const char* method,
128 const char* path,
129 csilk_handler_t handler);
130
138 csilk_app_t* app, const char* method, const char* path, csilk_handler_t* handlers, size_t n);
139
149void csilk_app_add_route_extended(csilk_app_t* app,
150 const char* method,
151 const char* path,
152 csilk_handler_t handler,
153 const char* input_type,
154 const char* output_type,
155 const char* summary,
156 const char* description);
157
165void csilk_app_add_route_perm(csilk_app_t* app,
166 const char* method,
167 const char* path,
168 csilk_handler_t handler,
169 const char* perm_required,
170 const char* perm_resource);
171
183void csilk_app_add_route_extended_perm(csilk_app_t* app,
184 const char* method,
185 const char* path,
186 csilk_handler_t handler,
187 const char* input_type,
188 const char* output_type,
189 const char* summary,
190 const char* description,
191 const char* perm_required,
192 const char* perm_resource);
193
198#define csilk_app_get(app, path, handler) csilk_app_add_route(app, "GET", path, handler)
200#define csilk_app_get_ext(app, path, handler, in, out, summary, desc) \
201 csilk_app_add_route_extended(app, "GET", path, handler, in, out, summary, desc)
203#define csilk_app_get_perm(app, path, handler, perm, res) \
204 csilk_app_add_route_perm(app, "GET", path, handler, perm, res)
209#define csilk_app_post(app, path, handler) csilk_app_add_route(app, "POST", path, handler)
211#define csilk_app_post_ext(app, path, handler, in, out, summary, desc) \
212 csilk_app_add_route_extended(app, "POST", path, handler, in, out, summary, desc)
214#define csilk_app_post_perm(app, path, handler, perm, res) \
215 csilk_app_add_route_perm(app, "POST", path, handler, perm, res)
220#define csilk_app_put(app, path, handler) csilk_app_add_route(app, "PUT", path, handler)
222#define csilk_app_put_ext(app, path, handler, in, out, summary, desc) \
223 csilk_app_add_route_extended(app, "PUT", path, handler, in, out, summary, desc)
225#define csilk_app_put_perm(app, path, handler, perm, res) \
226 csilk_app_add_route_perm(app, "PUT", path, handler, perm, res)
231#define csilk_app_delete(app, path, handler) csilk_app_add_route(app, "DELETE", path, handler)
234#define csilk_app_delete_ext(app, path, handler, in, out, summary, desc) \
235 csilk_app_add_route_extended(app, "DELETE", path, handler, in, out, summary, desc)
237#define csilk_app_delete_perm(app, path, handler, perm, res) \
238 csilk_app_add_route_perm(app, "DELETE", path, handler, perm, res)
243#define csilk_app_patch(app, path, handler) csilk_app_add_route(app, "PATCH", path, handler)
245#define csilk_app_patch_ext(app, path, handler, in, out, summary, desc) \
246 csilk_app_add_route_extended(app, "PATCH", path, handler, in, out, summary, desc)
248#define csilk_app_patch_perm(app, path, handler, perm, res) \
249 csilk_app_add_route_perm(app, "PATCH", path, handler, perm, res)
254#define csilk_app_options(app, path, handler) csilk_app_add_route(app, "OPTIONS", path, handler)
257#define csilk_app_options_ext(app, path, handler, in, out, summary, desc) \
258 csilk_app_add_route_extended(app, "OPTIONS", path, handler, in, out, summary, desc)
260#define csilk_app_options_perm(app, path, handler, perm, res) \
261 csilk_app_add_route_perm(app, "OPTIONS", path, handler, perm, res)
266#define csilk_app_head(app, path, handler) csilk_app_add_route(app, "HEAD", path, handler)
268#define csilk_app_head_ext(app, path, handler, in, out, summary, desc) \
269 csilk_app_add_route_extended(app, "HEAD", path, handler, in, out, summary, desc)
271#define csilk_app_head_perm(app, path, handler, perm, res) \
272 csilk_app_add_route_perm(app, "HEAD", path, handler, perm, res)
273
274/* ---- Static Files ---- */
275
280void csilk_app_static(csilk_app_t* app, const char* prefix, const char* root_dir);
281
282/* ---- Configuration ---- */
283
287void csilk_app_set_server_config(csilk_app_t* app, csilk_server_config_t c);
288
293csilk_config_t* csilk_app_config(csilk_app_t* app);
294
295/* ---- OpenAPI / Swagger ---- */
296
301void csilk_app_enable_openapi(csilk_app_t* app, int enable);
302
303/* ---- Run ---- */
304
309int csilk_app_run(csilk_app_t* app, int port);
310
311/* ---- Access underlying objects (advanced use) ---- */
312
316csilk_router_t* csilk_app_router(csilk_app_t* app);
317
321csilk_server_t* csilk_app_server(csilk_app_t* app);
322
323#endif /* CSILK_APP_H */
Main application structure containing config, router, server, and groups.
Definition app.c:162
void csilk_app_add_route_perm(csilk_app_t *app, const char *method, const char *path, csilk_handler_t handler, const char *perm_required, const char *perm_resource)
Register a route with permission metadata.
Definition app.c:667
void csilk_app_static(csilk_app_t *app, const char *prefix, const char *root_dir)
Serve static files from a local directory.
Definition app.c:724
void csilk_app_add_route(csilk_app_t *app, const char *method, const char *path, csilk_handler_t handler)
Register a route with a single handler.
Definition app.c:581
csilk_server_t * csilk_app_server(csilk_app_t *app)
Get the underlying server for advanced operations.
Definition app.c:837
void csilk_app_set_server_config(csilk_app_t *app, csilk_server_config_t c)
Apply server-level configuration (timeouts, limits, TCP options).
Definition app.c:769
void csilk_app_enable_openapi(csilk_app_t *app, int enable)
Enable or disable the built-in /openapi.json endpoint. The endpoint is enabled by default when the ap...
Definition app.c:565
void csilk_app_use(csilk_app_t *app, csilk_handler_t h)
Register a global middleware that runs on every route.
Definition app.c:505
void csilk_app_log_json(csilk_app_t *app, int enable)
Enable or disable JSON structured log output.
Definition app.c:484
csilk_router_t * csilk_app_router(csilk_app_t *app)
Get the underlying router for advanced operations.
Definition app.c:827
csilk_app_t * csilk_app_new(const char *config_path)
Create a new application with optional YAML config.
Definition app.c:316
int csilk_app_run(csilk_app_t *app, int port)
Start the server and block until stopped (Ctrl+C).
Definition app.c:812
void csilk_app_free(csilk_app_t *app)
Deallocate all application resources.
Definition app.c:415
void csilk_app_add_route_extended(csilk_app_t *app, const char *method, const char *path, csilk_handler_t handler, const char *input_type, const char *output_type, const char *summary, const char *description)
Register a route with OpenAPI metadata (input/output types).
Definition app.c:605
void csilk_app_add_handlers(csilk_app_t *app, const char *method, const char *path, csilk_handler_t *handlers, size_t n)
Register a route with multiple handlers (middleware + handler).
Definition app.c:686
void csilk_app_apply_config(csilk_app_t *app)
Auto-apply built-in middleware based on current config.
Definition app.c:542
csilk_config_t * csilk_app_config(csilk_app_t *app)
Get a copy of the current application configuration.
Definition app.c:787
void csilk_app_log_level(csilk_app_t *app, csilk_log_level_t level)
Set the minimum log level.
Definition app.c:443
void csilk_app_use_group(csilk_app_t *app, const char *prefix, csilk_handler_t h)
Register a middleware that runs only on a specific prefix group.
Definition app.c:523
void csilk_app_add_route_extended_perm(csilk_app_t *app, const char *method, const char *path, csilk_handler_t handler, const char *input_type, const char *output_type, const char *summary, const char *description, const char *perm_required, const char *perm_resource)
Register a route with full metadata including permissions.
Definition app.c:629
void csilk_app_log_file(csilk_app_t *app, const char *path, size_t max_sz)
Enable file logging with optional rotation.
Definition app.c:462
High-performance C web framework — main public API header.
Top-level application configuration.
Definition csilk.h:1000
The main HTTP router.
Definition csilk.h:1419
Low-level server configuration options.
Definition csilk.h:953
void(* csilk_handler_t)(csilk_ctx_t *c)
Function pointer for route handlers and middleware.
Definition csilk.h:120
csilk_log_level_t
Log severity levels.
Definition csilk.h:739