mirror of
https://github.com/elicpeter/nyx.git
synced 2026-06-24 20:28:06 +02:00
[pitboss/grind] deferred session-0014 (20260520T233019Z-6958)
This commit is contained in:
parent
d4fdd83578
commit
ba0f83a855
2 changed files with 201 additions and 3 deletions
|
|
@ -19,8 +19,8 @@ use crate::symbol::Lang;
|
|||
use tree_sitter::Node;
|
||||
|
||||
use super::rust_routes::{
|
||||
bind_rust_path_params, find_method_attribute, find_rust_function, rust_formal_names,
|
||||
source_imports_actix,
|
||||
bind_rust_path_params, find_actix_route_chain, find_method_attribute, find_rust_function,
|
||||
rust_formal_names, source_imports_actix,
|
||||
};
|
||||
|
||||
pub struct RustActixAdapter;
|
||||
|
|
@ -46,7 +46,8 @@ impl FrameworkAdapter for RustActixAdapter {
|
|||
return None;
|
||||
}
|
||||
let func = find_rust_function(ast, file_bytes, &summary.name)?;
|
||||
let (method, path) = find_method_attribute(func, file_bytes)?;
|
||||
let (method, path) = find_method_attribute(func, file_bytes)
|
||||
.or_else(|| find_actix_route_chain(ast, file_bytes, &summary.name))?;
|
||||
let formals = rust_formal_names(func, file_bytes);
|
||||
let request_params = bind_rust_path_params(&formals, &path);
|
||||
Some(FrameworkBinding {
|
||||
|
|
@ -126,4 +127,51 @@ mod tests {
|
|||
.detect(&summary("helper"), tree.root_node(), src)
|
||||
.is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn fires_on_app_new_route_chain() {
|
||||
let src: &[u8] = b"use actix_web::{App, web};\n\
|
||||
fn build() -> App<()> { App::new().route(\"/u/{id}\", web::get().to(show)) }\n\
|
||||
async fn show(id: String) -> String { id }\n";
|
||||
let tree = parse(src);
|
||||
let binding = RustActixAdapter
|
||||
.detect(&summary("show"), tree.root_node(), src)
|
||||
.expect("binding");
|
||||
assert_eq!(binding.adapter, "rust-actix");
|
||||
let route = binding.route.expect("route");
|
||||
assert_eq!(route.method, HttpMethod::GET);
|
||||
assert_eq!(route.path, "/u/{id}");
|
||||
let id = binding
|
||||
.request_params
|
||||
.iter()
|
||||
.find(|p| p.name == "id")
|
||||
.unwrap();
|
||||
assert!(matches!(id.source, ParamSource::PathSegment(_)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn fires_on_web_resource_route_chain() {
|
||||
let src: &[u8] = b"use actix_web::{App, web};\n\
|
||||
fn build() -> App<()> { App::new().service(web::resource(\"/save\").route(web::post().to(save))) }\n\
|
||||
async fn save(body: String) -> String { body }\n";
|
||||
let tree = parse(src);
|
||||
let binding = RustActixAdapter
|
||||
.detect(&summary("save"), tree.root_node(), src)
|
||||
.expect("binding");
|
||||
let route = binding.route.expect("route");
|
||||
assert_eq!(route.method, HttpMethod::POST);
|
||||
assert_eq!(route.path, "/save");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn chained_builder_requires_handler_match() {
|
||||
let src: &[u8] = b"use actix_web::{App, web};\n\
|
||||
fn build() -> App<()> { App::new().route(\"/x\", web::get().to(other)) }\n\
|
||||
async fn show() -> String { String::new() }\n\
|
||||
async fn other() -> String { String::new() }\n";
|
||||
let tree = parse(src);
|
||||
assert!(RustActixAdapter
|
||||
.detect(&summary("show"), tree.root_node(), src)
|
||||
.is_none());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue