Start work on adding queryParams, etc.
This commit is contained in:
parent
13a7ad97b5
commit
b4584fa377
|
@ -37,4 +37,6 @@ void deleteEnv(struct Environment* e);
|
||||||
|
|
||||||
struct Environment defaultEnv();
|
struct Environment defaultEnv();
|
||||||
|
|
||||||
|
struct StructDef getStructDef(struct Environment* env, const char* name);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -25,9 +25,9 @@
|
||||||
(def rel (attribute "rel"))
|
(def rel (attribute "rel"))
|
||||||
(def href (attribute "href"))
|
(def href (attribute "href"))
|
||||||
|
|
||||||
(def htmlize (fn (po) (cat
|
(def htmlize (fn (post) (cat
|
||||||
(h2 po's title)
|
(h2 post's title)
|
||||||
(p po's body))))
|
(p post's body))))
|
||||||
|
|
||||||
(def p1 (Post "Hey" "This is a post"))
|
(def p1 (Post "Hey" "This is a post"))
|
||||||
(def p2 (Post "This"
|
(def p2 (Post "This"
|
||||||
|
@ -46,7 +46,10 @@ stuff, when you think about it."
|
||||||
(htmlize p2)))
|
(htmlize p2)))
|
||||||
))))
|
))))
|
||||||
|
|
||||||
|
(def revealer (fn (x) (cat "x: " x)))
|
||||||
|
|
||||||
(get "/" homepage)
|
(get "/" homepage)
|
||||||
|
(get "/x" revealer)
|
||||||
|
|
||||||
(get "/styles.css" (fn () (
|
(get "/styles.css" (fn () (
|
||||||
"html {
|
"html {
|
||||||
|
|
|
@ -76,12 +76,14 @@ Object evalStructArgs(const Object* symbol, const Object* fields, struct Environ
|
||||||
def.fieldCount = listLength(fields);
|
def.fieldCount = listLength(fields);
|
||||||
def.names = malloc(sizeof(char*) * def.fieldCount);
|
def.names = malloc(sizeof(char*) * def.fieldCount);
|
||||||
|
|
||||||
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
FOR_POINTER_IN_LIST(fields) {
|
FOR_POINTER_IN_LIST(fields) {
|
||||||
def.names[i] = malloc(sizeof(char) * (strlen(POINTER->string) + 1));
|
def.names[i] = malloc(sizeof(char) * (strlen(POINTER->string) + 1));
|
||||||
strcpy(def.names[i], POINTER->string);
|
strcpy(def.names[i], POINTER->string);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while (env->outer) {
|
while (env->outer) {
|
||||||
env = env->outer;
|
env = env->outer;
|
||||||
|
@ -318,10 +320,7 @@ Object evalList(const Object* obj, struct Environment* env)
|
||||||
|
|
||||||
int def = -1;
|
int def = -1;
|
||||||
if (first_form->type == TYPE_SYMBOL) {
|
if (first_form->type == TYPE_SYMBOL) {
|
||||||
struct Environment* outerEnv = env;
|
struct Environment* outerEnv = global();
|
||||||
while (outerEnv->outer) {
|
|
||||||
outerEnv = outerEnv->outer;
|
|
||||||
}
|
|
||||||
for (int i = 0; i < outerEnv->structCount; i++) {
|
for (int i = 0; i < outerEnv->structCount; i++) {
|
||||||
if (strcmp(first_form->string, outerEnv->structDefs[i].name) == 0) {
|
if (strcmp(first_form->string, outerEnv->structDefs[i].name) == 0) {
|
||||||
def = i;
|
def = i;
|
||||||
|
|
36
src/web.c
36
src/web.c
|
@ -15,6 +15,11 @@
|
||||||
#include "web.h"
|
#include "web.h"
|
||||||
#include "pebblisp.h"
|
#include "pebblisp.h"
|
||||||
|
|
||||||
|
struct StructDef query = {
|
||||||
|
.fieldCount = 1,
|
||||||
|
.name = "",
|
||||||
|
.names = {""}
|
||||||
|
};
|
||||||
int routeCount = 0;
|
int routeCount = 0;
|
||||||
struct Route routes[10];
|
struct Route routes[10];
|
||||||
|
|
||||||
|
@ -36,7 +41,22 @@ int methodMatches(const char* method, struct Route* route)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum MHD_Result
|
static int
|
||||||
|
print_out_key (void *queryParamsV, enum MHD_ValueKind kind, const char *key,
|
||||||
|
const char *value)
|
||||||
|
{
|
||||||
|
(void) kind; /* Unused. Silent compiler warning. */
|
||||||
|
Object* queryParams = queryParamsV;
|
||||||
|
|
||||||
|
Object pair = startList(stringFromSlice(key, strlen(key)));
|
||||||
|
nf_addToList(&pair, parseEval(value, NULL));
|
||||||
|
nf_addToList(queryParams, pair);
|
||||||
|
|
||||||
|
return MHD_YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
//static enum MHD_Result
|
||||||
|
static int
|
||||||
answer_to_connection(void *cls, struct MHD_Connection *connection,
|
answer_to_connection(void *cls, struct MHD_Connection *connection,
|
||||||
const char *url, const char *method,
|
const char *url, const char *method,
|
||||||
const char *version, const char *upload_data,
|
const char *version, const char *upload_data,
|
||||||
|
@ -44,14 +64,17 @@ answer_to_connection(void *cls, struct MHD_Connection *connection,
|
||||||
{
|
{
|
||||||
const char *page = NULL;
|
const char *page = NULL;
|
||||||
printf("%s URL: '%s' :: ", method, url);
|
printf("%s URL: '%s' :: ", method, url);
|
||||||
|
printf("version: %s\n", version);
|
||||||
|
printf("upload_data: %s\n", upload_data);
|
||||||
for (int i = 0; i < routeCount; i++) {
|
for (int i = 0; i < routeCount; i++) {
|
||||||
printf("route[%d]\n", i);
|
|
||||||
if (methodMatches(method, &routes[i]) && strcmp(url, routes[i].path) == 0) {
|
if (methodMatches(method, &routes[i]) && strcmp(url, routes[i].path) == 0) {
|
||||||
|
Object queryParams = listObject();
|
||||||
|
MHD_get_connection_values(connection, MHD_GET_ARGUMENT_KIND, print_out_key, &queryParams);
|
||||||
//page = routes[i].routeAction(url);
|
//page = routes[i].routeAction(url);
|
||||||
Object emptyList = listObject();
|
Object lambdaList = listObject();
|
||||||
nf_addToList(&emptyList, numberObject(0));
|
nf_addToList(&lambdaList, queryParams);
|
||||||
Object route = cloneObject(routes[i].routeAction);
|
Object route = cloneObject(routes[i].routeAction);
|
||||||
Object result = listEvalLambda(&route, &emptyList, routes[i].env);
|
Object result = listEvalLambda(&route, &lambdaList, routes[i].env);
|
||||||
page = result.string;
|
page = result.string;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -63,7 +86,8 @@ answer_to_connection(void *cls, struct MHD_Connection *connection,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MHD_Response *response;
|
struct MHD_Response *response;
|
||||||
enum MHD_Result ret;
|
//enum MHD_Result ret;
|
||||||
|
int ret;
|
||||||
(void) cls; /* Unused. Silent compiler warning. */
|
(void) cls; /* Unused. Silent compiler warning. */
|
||||||
(void) url; /* Unused. Silent compiler warning. */
|
(void) url; /* Unused. Silent compiler warning. */
|
||||||
(void) method; /* Unused. Silent compiler warning. */
|
(void) method; /* Unused. Silent compiler warning. */
|
||||||
|
|
Loading…
Reference in New Issue