materialize_decl_wrapper_result

func materialize_decl_wrapper_result(consume result: DeclWrapperResult, context_tag: Int) -> DeclWrapperOutput

Turn the wrapper author's result into the flattened service output consumed by the Rust expansion driver.

View Source
pub func materialize_decl_wrapper_result(consume result: DeclWrapperResult, context_tag: Int) -> DeclWrapperOutput {
	match result {
		.remove -> DeclWrapperOutput(
			source: "",
			outcome: .none,
			metadata: SyntaxMetadataOutput(identifiers: []),
			removed: true,
			failure_code: .none,
			failure_message: .none,
			failure_start: 0,
			failure_end: 0
		),
		.failure(failure) -> decl_wrapper_failure(code: failure.code, message: failure.message, span: failure.span),
		.replace(syntax) -> {
			let materialized = materialize_decl_syntax_in(syntax: syntax, context_tag: context_tag)
			if let .some(failure) = materialized.failure {
				return decl_wrapper_failure(code: failure.code, message: failure.message, span: failure.span)
			}
			if let .some(value) = materialized.value {
				let metadata = syntax_metadata_output(materialized: value)
				return DeclWrapperOutput(
					source: value.source,
					outcome: .some(value.outcome),
					metadata: metadata,
					removed: false,
					failure_code: .none,
					failure_message: .none,
					failure_start: 0,
					failure_end: 0
				)
			}
			decl_wrapper_failure(code: "macro.empty-result", message: "Wrapper returned no declaration syntax", span: 0..<0)
		}
	}
}