materialize_expr_macro_result

func materialize_expr_macro_result(consume result: SyntaxResult<Expr>) -> ExprMacroOutput

Turn the macro author's category-checked result into the single flattened service output consumed by the Rust expansion driver.

View Source
pub func materialize_expr_macro_result(consume result: SyntaxResult<Expr>) -> ExprMacroOutput {
	if let .some(failure) = result.failure {
		return expr_macro_failure(code: failure.code, message: failure.message, span: failure.span)
	}
	if let .some(syntax) = result.value {
		let materialized = materialize_expr_syntax(syntax: syntax)
		if let .some(failure) = materialized.failure {
			return expr_macro_failure(code: failure.code, message: failure.message, span: failure.span)
		}
		if let .some(value) = materialized.value {
			let metadata = syntax_metadata_output(materialized: value)
			return ExprMacroOutput(
				source: value.source,
				outcome: .some(value.outcome),
				metadata: metadata,
				failure_code: .none,
				failure_message: .none,
				failure_start: 0,
				failure_end: 0
			)
		}
	}
	expr_macro_failure(code: "macro.empty-result", message: "Macro returned no expression syntax", span: 0..<0)
}