{"record":{"id":"aa217bff142abb35","repo":"GraphiteEditor/Graphite","slug":"failed-to-parse-output-type-for-implementation","errorCode":null,"errorMessage":"Failed to parse output type for #[implementation(...)]. Expected a valid Rust type after `->`.\nError: {}","messagePattern":"Failed to parse output type for #\\[implementation\\(\\.\\.\\.\\)\\]\\. Expected a valid Rust type after `->`\\.\nError: (.+?)","errorType":"validation","errorClass":"syn::Error","httpStatus":null,"severity":"error","filePath":"node-graph/node-macro/src/parsing.rs","lineNumber":374,"sourceCode":"\t\t\t\tinput.span(),\n\t\t\t\tformatdoc!(\n\t\t\t\t\t\"Failed to parse input type for #[implementation(...)]. Expected a valid Rust type.\n\t\t\t\t\tError: {}\",\n\t\t\t\t\te,\n\t\t\t\t),\n\t\t\t)\n\t\t})?;\n\t\tlet arrow: RArrow = input.parse().map_err(|_| {\n\t\t\tError::new(\n\t\t\t\tinput.span(),\n\t\t\t\tindoc!(\n\t\t\t\t\t\"Expected `->` arrow after input type in #[implementations(...)] on a field of type `impl Node`.\n\t\t\t\t\tThe correct syntax is `InputType -> OutputType`.\"\n\t\t\t\t),\n\t\t\t)\n\t\t})?;\n\t\tlet output_type: Type = input.parse().map_err(|e| {\n\t\t\tError::new(\n\t\t\t\tinput.span(),\n\t\t\t\tformatdoc!(\n\t\t\t\t\t\"Failed to parse output type for #[implementation(...)]. Expected a valid Rust type after `->`.\n\t\t\t\t\tError: {}\",\n\t\t\t\t\te\n\t\t\t\t),\n\t\t\t)\n\t\t})?;\n\n\t\tOk(Implementation {\n\t\t\tinput: input_type,\n\t\t\t_arrow: arrow,\n\t\t\toutput: output_type,\n\t\t})\n\t}\n}\n\nimpl Parse for NodeFnAttributes {","sourceCodeStart":356,"sourceCodeEnd":392,"githubUrl":"https://github.com/GraphiteEditor/Graphite/blob/c507b356453361e31638b8bff8f6d46b6da2961e/node-graph/node-macro/src/parsing.rs#L356-L392","documentation":"The mirror of the input-type error: the tokens after `->` failed to parse as a valid Rust type. The output side of the pair is missing entirely or is not valid type syntax.","triggerScenarios":"#[implementations(f64 -> )] (empty output); #[implementations(f64 -> 3)] (a literal instead of a type); unbalanced angle brackets after the arrow such as #[implementations(f64 -> Vec<)].","commonSituations":"Truncating an entry while editing a long implementations list; copy-paste that drops the final token; deeply nested generics with unbalanced brackets.","solutions":["Complete the pair with a valid type: #[implementations(f64 -> f64)]","Balance all angle brackets in nested generics (e.g. Vec<Vec<f64>>)","Use the appended syn error text to locate the offending token"],"exampleFix":"// before\n#[implementations(f64 -> )]\n\n// after\n#[implementations(f64 -> f64)]","handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Complete every pair: f64 -> f64, never f64 -> or f64 -> 3","Balance angle brackets in nested generics before saving","Compile per-node as you edit to catch truncated entries immediately"],"tags":["proc-macro","rust","node-graph","compile-time"],"backgroundTag":"proc-macro-syntax-error","analyzedSha":"c507b356453361e31638b8bff8f6d46b6da2961e","analyzedAt":"2026-08-16T21:57:18.596Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}