24#ifndef GOBY_MIDDLEWARE_TOOL_INTERFACE_VALIDATE_H
25#define GOBY_MIDDLEWARE_TOOL_INTERFACE_VALIDATE_H
82 return e.display_group() +
" (" + e.scheme +
" " + e.type +
")";
95 for (
const auto& platform : deployment.
platforms)
98 for (
const auto& module : platform.modules)
103 std::map<std::tuple<const Application*, PubSubEntry>,
bool> reached;
109 auto it = reached.emplace(std::make_tuple(c.sub_at.application, c.sub),
false).first;
110 it->second = it->second || !c.loose;
113 auto add = [&](
Issue::Severity severity,
const std::string& code,
const std::string& message,
121 issues.push_back(issue);
124 std::vector<Unmatched> pubs, subs;
127 for (
const auto& u : subs)
133 auto it = reached.find(std::make_tuple(u.at.application, u.entry));
134 bool met = it != reached.end() && (it->second || params.
assume_dynamic);
144 std::string message =
147 :
"only a dynamic publisher with a numeric set at run time reaches " +
150 if (u.entry.necessity_overridden)
151 message +=
" (necessity set by the deployment)";
158 for (
const auto* entries : {&pubs, &subs})
160 for (
const auto& u : *entries)
164 if (u.entry.unresolved())
166 "goby_clang_tool could not determine this dynamic group" +
167 (u.entry.expr.empty() ? std::string() :
" (" + u.entry.expr +
")") +
168 "; a dynamic: bind can say what it stands for",
170 else if (u.entry.unbound())
172 "the numeric part of " + u.entry.group +
173 " is set at run time; give it with bind: { group: " + u.entry.group +
183 if (u.entry.is_inner_pub || !filter.
is_included(u))
detail namespace with internal helper functions
The global namespace for the Goby project.
One publication or subscription as written to (and read from) an interface file.
std::string display_group() const
The group as a deployment sees it, with any bound numeric values.
goby::middleware::Necessity necessity