#ifndef FESA_RESULTS_PREPARED_RESULTS_WRITER_H_ #define FESA_RESULTS_PREPARED_RESULTS_WRITER_H_ #include #include #include "fesa/analysis/prepared_analysis_outcome.h" #include "fesa/core/diagnostic.h" #include "fesa/core/status.h" namespace fesa { class Domain; class ResultsWriter; class NonlinearResultsWriter; class EigenResultsWriter; class DynamicResultsWriter; class ThermalResultsWriter; class SolidResultsWriter; /// @brief Routes one completed typed outcome to its authoritative writer. /// @pre Domain, outcome, diagnostics, and adapters remain alive for this call. /// The caller has closed its analysis log successfully before publication. /// @param results_path Explicit output path, retaining each writer's contract. /// @note Optional adapters are required only for their matching outcome family. /// @return The selected writer's Status after candidate validation/finalization, /// or the existing missing-adapter output failure without invoking a writer. Status WritePreparedAnalysisResult( const std::filesystem::path& results_path, const Domain& domain, const PreparedAnalysisOutcome& outcome, const std::vector& diagnostics, ResultsWriter& linear_writer, NonlinearResultsWriter& nonlinear_writer, EigenResultsWriter& eigen_writer, DynamicResultsWriter* dynamic_writer = nullptr, ThermalResultsWriter* thermal_writer = nullptr, SolidResultsWriter* solid_writer = nullptr); } // namespace fesa #endif // FESA_RESULTS_PREPARED_RESULTS_WRITER_H_