test(derive): close second mutation shard
Match public Form<T> paths with one unambiguous segment pattern and record clean hemx-derive shard 2/8 proof. req: derive_handler/004 req: test/022 req: test/023
This commit is contained in:
+6
-15
@@ -289,22 +289,13 @@ fn form_model_type(ty: &Type) -> Option<Type> {
|
||||
let Type::Path(path) = ty else {
|
||||
return None;
|
||||
};
|
||||
let mut segments = path.path.segments.iter();
|
||||
let first = segments.next()?;
|
||||
let last = path
|
||||
.path
|
||||
.segments
|
||||
.last()
|
||||
.expect("path has at least one segment");
|
||||
let path_is_form = if path.path.segments.len() == 1 {
|
||||
first.ident == "Form"
|
||||
} else {
|
||||
first.ident == "hemx" && last.ident == "Form"
|
||||
let segments = path.path.segments.iter().collect::<Vec<_>>();
|
||||
let form = match segments.as_slice() {
|
||||
[form] if form.ident == "Form" => form,
|
||||
[hemx, .., form] if hemx.ident == "hemx" && form.ident == "Form" => form,
|
||||
_ => return None,
|
||||
};
|
||||
if !path_is_form {
|
||||
return None;
|
||||
}
|
||||
let PathArguments::AngleBracketed(args) = &last.arguments else {
|
||||
let PathArguments::AngleBracketed(args) = &form.arguments else {
|
||||
return None;
|
||||
};
|
||||
args.args.iter().find_map(|arg| match arg {
|
||||
|
||||
Reference in New Issue
Block a user