http errors 404 and 415

This commit is contained in:
Shautvast 2025-11-03 22:36:12 +01:00
parent 3142e59450
commit 38dfe503d3
2 changed files with 26 additions and 21 deletions

View file

@ -26,14 +26,6 @@ pub(crate) fn compile_function(
) -> Result<Chunk, CompilerErrorAtLine> {
let fn_name = &function.name.lexeme;
let mut compiler = Compiler::new(fn_name);
if is_http_method(fn_name) {
compiler.chunk.add_var(&TokenType::StringType, "path");
compiler.chunk.add_var(&TokenType::MapType, "query");
compiler.chunk.add_var(&TokenType::MapType, "headers");
compiler.vars.insert("path".to_string(), 0);
compiler.vars.insert("query".to_string(), 1);
compiler.vars.insert("headers".to_string(), 2);
}
for parm in &function.parameters {
let name = parm.name.lexeme.clone();
let var_index = compiler.chunk.add_var(&parm.var_type, &parm.name.lexeme);
@ -44,10 +36,6 @@ pub(crate) fn compile_function(
Ok(compiler.compile(&function.body, registry, namespace)?)
}
fn is_http_method(name: &str) -> bool {
vec!["get", "post", "put", "delete", "patch"].contains(&name)
}
pub(crate) fn compile_in_namespace(
ast: &Vec<Statement>,
namespace: Option<&str>,

View file

@ -37,7 +37,9 @@ async fn main() -> Result<(), crudlang::errors::Error> {
axum::serve(listener, app).await.map_err(map_underlying())?;
Ok(())
} else {
Err(Platform("No source files found or compilation error".to_string()))
Err(Platform(
"No source files found or compilation error".to_string(),
))
}
}
@ -62,16 +64,31 @@ async fn handle_any(
.collect()
})
.unwrap_or_default();
let component = format!("{}/web.{}", &uri.path()[1..], method);
let component = format!("{}/web", &uri.path()[1..]);
let function_qname = format!("{}.{}", component, method);
let mut headers = HashMap::new();
for (k,v) in req.headers().iter(){
for (k, v) in req.headers().iter() {
headers.insert(k.to_string(), v.to_str().unwrap().to_string());
}
Ok(Json(
interpret_async(&state.registry, &component, &req.uri().to_string(), query_params, headers)
let path = &req.uri().to_string();
match interpret_async(
&state.registry,
&function_qname,
path,
query_params,
headers,
)
.await
.unwrap()
.to_string(),
))
{
Ok(value) => Ok(Json(value.to_string())),
Err(e) => {
// url checks out but function for method not found
if state.registry.get(&format!("{}.main",component)).is_some() {
Err(StatusCode::METHOD_NOT_ALLOWED)
} else {
Err(StatusCode::NOT_FOUND)
}
}
}
}