You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.8 KiB
103 lines
3.8 KiB
#ifndef AIRMAP_RULESETS_H_ |
|
#define AIRMAP_RULESETS_H_ |
|
|
|
#include <airmap/do_not_copy_or_move.h> |
|
#include <airmap/error.h> |
|
#include <airmap/evaluation.h> |
|
#include <airmap/geometry.h> |
|
#include <airmap/outcome.h> |
|
#include <airmap/ruleset.h> |
|
|
|
#include <cstdint> |
|
#include <functional> |
|
#include <vector> |
|
|
|
namespace airmap { |
|
|
|
/// RuleSets provides functionality for managing contextual airspace. |
|
class RuleSets : DoNotCopyOrMove { |
|
public: |
|
/// Search bundles up types to ease interaction with |
|
/// RuleSets::search. |
|
struct Search { |
|
struct Parameters { |
|
Required<Geometry> geometry; ///< Search for rulesets intersecting this geometry. |
|
}; |
|
|
|
/// Result models the outcome of calling RuleSets::search. |
|
using Result = Outcome<std::vector<RuleSet>, Error>; |
|
/// Callback describes the function signature of the callback that is invoked |
|
/// when a call to RuleSets::search finishes. |
|
using Callback = std::function<void(const Result&)>; |
|
}; |
|
|
|
/// ForId bundles up types to ease interaction with |
|
/// RuleSets::for_id. |
|
struct ForId { |
|
struct Parameters { |
|
RuleSet::Id id; ///< Search for the ruleset with this id. |
|
}; |
|
|
|
/// Result models the outcome of calling RuleSets::for_id. |
|
using Result = Outcome<RuleSet, Error>; |
|
/// Callback describes the function signature of the callback that is invoked |
|
/// when a call to RuleSets::for_id finishes. |
|
using Callback = std::function<void(const Result&)>; |
|
}; |
|
|
|
/// FetchRules bundles up types to ease interaction with |
|
/// RuleSets::fetch_rules. |
|
struct FetchRules { |
|
struct Parameters { |
|
Optional<std::string> rulesets; ///< Fetch rules which apply to these rulesets. |
|
}; |
|
|
|
/// Result models the outcome of calling RuleSets::fetch_rules. |
|
using Result = Outcome<std::vector<RuleSet>, Error>; |
|
/// Callback describes the function signature of the callback that is invoked |
|
/// when a call to RuleSets::fetch_rules finishes. |
|
using Callback = std::function<void(const Result&)>; |
|
}; |
|
|
|
/// EvaluateRules bundles up types to ease interaction with |
|
/// RuleSets::evaluate_rulesets. |
|
struct EvaluateRules { |
|
struct Parameters { |
|
Required<Geometry> geometry; ///< Evaluate rulesets intersecting this geometry. |
|
std::unordered_map<std::string, RuleSet::Feature::Value> |
|
features; ///< Additional properties of the planned flight. |
|
Required<std::string> rulesets; ///< Evaluate these rulesets. |
|
}; |
|
|
|
/// Result models the outcome of calling RuleSets::evaluate_rulesets. |
|
using Result = Outcome<Evaluation, Error>; |
|
/// Callback describes the function signature of the callback that is invoked |
|
/// when a call to RuleSets::evaluate_rulesets finishes. |
|
using Callback = std::function<void(const Result&)>; |
|
}; |
|
|
|
/// search queries the AirMap services for detailed information about |
|
/// rulesets identified by geometry and reports back results to 'cb'. |
|
virtual void search(const Search::Parameters& parameters, const Search::Callback& cb) = 0; |
|
|
|
/// for_id queries the AirMap services for detailed information about |
|
/// a ruleset identified by a UUID and reports back results to 'cb'. |
|
virtual void for_id(const ForId::Parameters& parameters, const ForId::Callback& cb) = 0; |
|
|
|
/// fetch_rules fetches rules from the rulesets identified by 'parameters' and |
|
/// reports back results to 'cb'. |
|
virtual void fetch_rules(const FetchRules::Parameters& parameters, const FetchRules::Callback& cb) = 0; |
|
|
|
/// evaluate_rulesets evaluates rulesets and geometry identified by 'parameters' and |
|
/// reports back results to 'cb'. |
|
virtual void evaluate_rulesets(const EvaluateRules::Parameters& parameters, const EvaluateRules::Callback& cb) = 0; |
|
|
|
protected: |
|
/// @cond |
|
RuleSets() = default; |
|
/// @endcond |
|
}; |
|
|
|
} // namespace airmap |
|
|
|
#endif // AIRMAP_RULESETS_H_
|
|
|