plugify 1.2.8
Loading...
Searching...
No Matches
dependency_resolver.hpp
1#pragma once
2
3#include "plugify/extension.hpp"
4
5namespace plugify {
10 UniqueId affectedExtension{ -1 };
11 UniqueId involvedExtension{ -1 };
12 std::string problem;
13 std::string description;
14 std::optional<std::vector<std::string>> suggestedFixes;
15 bool isBlocking{ true }; // True if this issue prevents loading the extension
16
17 // Generate detailed description with constraint info
18 std::string GetDetailedDescription() const {
19 std::string buffer;
20 auto it = std::back_inserter(buffer);
21
22 std::format_to(it, "{}: {}", problem, description);
23
24 if (suggestedFixes && !suggestedFixes->empty()) {
25 std::format_to(it, "\n Suggestions:");
26 for (const auto& fix : *suggestedFixes) {
27 std::format_to(it, "\n - ", fix);
28 }
29 }
30
31 return buffer;
32 }
33 };
34
39 // Main report data
40 std::unordered_map<UniqueId, std::vector<DependencyIssue>> issues;
41
42 // Dependency graph
43 std::unordered_map<UniqueId, std::vector<UniqueId>> dependencyGraph; // For quick dep checks
44 std::unordered_map<UniqueId, std::vector<UniqueId>> reverseDependencyGraph; // For skipping
45 // dependents
46
47 // Load order
48 std::vector<UniqueId> loadOrder;
49 bool isLoadOrderValid{ false }; // False if circular deps prevent valid ordering
50 };
51
59 public:
60 virtual ~IDependencyResolver() = default;
61
73 virtual ResolutionReport Resolve(std::span<const Extension> extensions) = 0;
74 };
75} // namespace plugify
Interface for resolving dependencies in a Plugify environment.
virtual ResolutionReport Resolve(std::span< const Extension > extensions)=0
Resolve dependencies and generate a report.
Represents a specific issue found during dependency resolution.
Represents the result of a dependency resolution process.