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.
241 lines
11 KiB
241 lines
11 KiB
#ifndef AIRMAP_PILOTS_H_ |
|
#define AIRMAP_PILOTS_H_ |
|
|
|
#include <airmap/aircraft.h> |
|
#include <airmap/do_not_copy_or_move.h> |
|
#include <airmap/error.h> |
|
#include <airmap/optional.h> |
|
#include <airmap/outcome.h> |
|
#include <airmap/pilot.h> |
|
|
|
#include <functional> |
|
#include <iosfwd> |
|
#include <string> |
|
#include <vector> |
|
|
|
namespace airmap { |
|
|
|
/// Pilots provides functionality to manage (the authorized) pilot. |
|
class Pilots : DoNotCopyOrMove { |
|
public: |
|
/// Exclude enumerates fields that can be excluded when querying pilot and aircraft properties. |
|
enum class Exclude { |
|
aircraft = 1 << 0, ///< Exclude aircraft data from results. |
|
user_metadata = 1 << 1, ///< Exclude user-specific metadata from results. |
|
app_metadata = 1 << 2, ///< Exclude app-specific metadata from results. |
|
authorized_apps = 1 << 3 ///< Exclude list of authorized apps from results. |
|
}; |
|
|
|
/// Authenticated bundles up types to ease interaction |
|
/// with Pilots::authenticated. |
|
struct Authenticated { |
|
/// Parameters bundles up input parameters. |
|
struct Parameters { |
|
std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. |
|
Optional<Exclude> exclude{}; ///< Exclude these fields from results. |
|
bool retrieve_statistics{false}; ///< If true, statistics about flights and aircrafts are requested. |
|
}; |
|
|
|
/// Result models the outcome of calling Pilots::authenticated. |
|
using Result = Outcome<Pilot, Error>; |
|
/// Callback describes the function signature of the callback that is |
|
/// invoked when a call to Pilots::authenticated finishes. |
|
using Callback = std::function<void(const Result&)>; |
|
}; |
|
|
|
/// ForId bundles up types to ease interaction |
|
/// with Pilots::for_id. |
|
struct ForId { |
|
/// Parameters bundles up input parameters. |
|
struct Parameters { |
|
std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. |
|
std::string id; ///< Searches for the specific pilot with this id. |
|
Optional<Exclude> exclude{}; ///< Exclude these fields from results. |
|
bool retrieve_statistics{false}; ///< If true, statistics about flights and aircrafts are requested. |
|
}; |
|
|
|
/// Result models the outcome of calling Pilots::for_id. |
|
using Result = Outcome<Pilot, Error>; |
|
/// Callback describes the function signature of the callback that is |
|
/// invoked when a call to Pilots::for_id finishes. |
|
using Callback = std::function<void(const Result&)>; |
|
}; |
|
|
|
/// UpdateForId bundles up types to ease interaction |
|
/// with Pilots::update_for_id. |
|
struct UpdateForId { |
|
/// Parameters bundles up input parameters. |
|
struct Parameters { |
|
std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. |
|
std::string id; ///< Updates the specific pilot with this id. |
|
std::string first_name; ///< The first name of the pilot. |
|
std::string last_name; ///< The last name of the pilot. |
|
std::string user_name; ///< The AirMap username of this pilot. |
|
std::string phone; ///< The phone number of the pilot. |
|
std::map<std::string, std::string> app_metadata; ///< App-specific metadata associated to the pilot. |
|
std::map<std::string, std::string> user_metadata; ///< User-specific metadata associated to the pilot. |
|
}; |
|
|
|
/// Result models the outcome of calling Pilots::update_for_id. |
|
using Result = Outcome<Pilot, Error>; |
|
/// Callback describes the function signature of the callback that is |
|
/// invoked when a call to Pilots::update_for_id finishes. |
|
using Callback = std::function<void(const Result&)>; |
|
}; |
|
|
|
/// StartVerifyPilotPhoneForId bundles up types to ease interaction |
|
/// with Pilots::start_verify_pilot_phone_for_id. |
|
struct StartVerifyPilotPhoneForId { |
|
/// Parameters bundles up input parameters. |
|
struct Parameters { |
|
std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. |
|
std::string id; ///< Verifies the phone number for the pilot with this id. |
|
}; |
|
|
|
struct Empty {}; |
|
|
|
/// Result models the outcome of calling Pilots::start_verify_pilot_phone_for_id. |
|
using Result = Outcome<Empty, Error>; |
|
/// Callback describes the function signature of the callback that is |
|
/// invoked when a call to Pilots::start_verify_pilot_phone_for_id finishes. |
|
using Callback = std::function<void(const Result&)>; |
|
}; |
|
|
|
/// FinishVerifyPilotPhoneForId bundles up types to ease interaction |
|
/// with Pilots::finish_verify_pilot_phone_for_id. |
|
struct FinishVerifyPilotPhoneForId { |
|
/// Parameters bundles up input parameters. |
|
struct Parameters { |
|
std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. |
|
std::string id; ///< Verifies the phone number for the pilot with this id. |
|
std::uint32_t token; ///< The token that was received on the pilot's phone. |
|
}; |
|
|
|
struct Empty {}; |
|
|
|
/// Result models the outcome of calling Pilots::finish_verify_pilot_phone_for_id. |
|
using Result = Outcome<Empty, Error>; |
|
/// Callback describes the function signature of the callback that is |
|
/// invoked when a call to Pilots::finish_verify_pilot_phone_for_id finishes. |
|
using Callback = std::function<void(const Result&)>; |
|
}; |
|
|
|
/// Aircrafts bundles up types to ease interaction |
|
/// with Pilots::aircrafts. |
|
struct Aircrafts { |
|
/// Parameters bundles up input parameters. |
|
struct Parameters { |
|
std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. |
|
std::string id; ///< Lists all aircrafts owned by the pilot with this id. |
|
}; |
|
|
|
/// Result models the outcome of calling Pilots::aircrafts. |
|
using Result = Outcome<std::vector<Pilot::Aircraft>, Error>; |
|
/// Callback describes the function signature of the callback that is |
|
/// invoked when a call to Pilots::aircrafts finishes. |
|
using Callback = std::function<void(const Result&)>; |
|
}; |
|
|
|
/// AddAircraft bundles up types to ease interaction |
|
/// with Pilots::add_aircraft. |
|
struct AddAircraft { |
|
/// Parameters bundles up input parameters. |
|
struct Parameters { |
|
std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. |
|
std::string id; ///< Adds an aircraft for the pilot with this id. |
|
std::string model_id; ///< The id of the model of the aircraft. |
|
std::string nick_name; ///< The nickname of the aircraft. |
|
}; |
|
|
|
/// Result models the outcome of calling Pilots::add_aircraft. |
|
using Result = Outcome<Pilot::Aircraft, Error>; |
|
/// Callback describes the function signature of the callback that is |
|
/// invoked when a call to Pilots::add_aircraft finishes. |
|
using Callback = std::function<void(const Result&)>; |
|
}; |
|
|
|
/// DeleteAircraft bundles up types to ease interaction |
|
/// with Pilots::delete_aircraft. |
|
struct DeleteAircraft { |
|
/// Parameters bundles up input parameters. |
|
struct Parameters { |
|
std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. |
|
std::string id; ///< Deletes an aircraft for the pilot with this id. |
|
std::string aircraft_id; ///< Deletes the specific aircraft with this id. |
|
}; |
|
|
|
struct Empty {}; |
|
|
|
/// Result models the outcome of calling Pilots::delete_aircraft. |
|
using Result = Outcome<Empty, Error>; |
|
/// Callback describes the function signature of the callback that is |
|
/// invoked when a call to Pilots::delete_aircraft finishes. |
|
using Callback = std::function<void(const Result&)>; |
|
}; |
|
|
|
/// UpdateAircraft bundles up types to ease interaction |
|
/// with Pilots::update_aircraft. |
|
struct UpdateAircraft { |
|
/// Parameters bundles up input parameters. |
|
struct Parameters { |
|
std::string authorization; ///< Authorization token obtained by logging in to the AirMap services. |
|
std::string id; ///< Updates an aircraft for the pilot with this id. |
|
std::string aircraft_id; ///< Update the specific aircraft with this id. |
|
std::string nick_name; ///< The new nick name for the aircraft. |
|
}; |
|
|
|
struct Empty {}; |
|
/// Result models the outcome of calling Pilots::update_aircraft. |
|
using Result = Outcome<Empty, Error>; |
|
/// Callback describes the function signature of the callback that is |
|
/// invoked when a call to Pilots::update_aircraft finishes. |
|
using Callback = std::function<void(const Result&)>; |
|
}; |
|
|
|
/// current_user queries the AirMap services for the pilot profile |
|
/// connected to the authenticated user, reporting results to 'cb'. |
|
virtual void authenticated(const Authenticated::Parameters& parameters, const Authenticated::Callback& cb) = 0; |
|
|
|
/// for_id queries the AirMap services for the pilot profile |
|
/// with a given id, reporting results to 'cb'. |
|
virtual void for_id(const ForId::Parameters& parameters, const ForId::Callback& cb) = 0; |
|
|
|
/// update_for_id updates the pilot profile specified |
|
// by Parameters::id, reporting results to 'cb'. |
|
virtual void update_for_id(const UpdateForId::Parameters& parameters, const UpdateForId::Callback& cb) = 0; |
|
|
|
/// start_verify_pilot_phone_for_id sends a verification token to the phone |
|
/// number stored in the pilot profile, reporting results to 'cb'. |
|
virtual void start_verify_pilot_phone_for_id(const StartVerifyPilotPhoneForId::Parameters& parameters, |
|
const StartVerifyPilotPhoneForId::Callback& cb) = 0; |
|
|
|
/// finish_verify_pilot_phone_for_id responds to a verification request by |
|
/// sending back the token sent to the pilot's phone, reporting results to 'cb'. |
|
virtual void finish_verify_pilot_phone_for_id(const FinishVerifyPilotPhoneForId::Parameters& parameters, |
|
const FinishVerifyPilotPhoneForId::Callback& cb) = 0; |
|
|
|
/// aircrafts queries the list of aircrafts owned by a pilot, reporting results to 'cb'. |
|
virtual void aircrafts(const Aircrafts::Parameters& parameters, const Aircrafts::Callback& cb) = 0; |
|
|
|
/// add_aircraft associates a new aircraft with a pilot, reporting results to 'cb'. |
|
virtual void add_aircraft(const AddAircraft::Parameters& parameters, const AddAircraft::Callback& cb) = 0; |
|
|
|
/// delete_aircraft removes an aircraft from a pilot profile, reporting results to 'cb'. |
|
virtual void delete_aircraft(const DeleteAircraft::Parameters& parameters, const DeleteAircraft::Callback& cb) = 0; |
|
|
|
/// update_aircraft updates the properties of an aircraft associated with a pilot, reporting results to 'cb'. |
|
virtual void update_aircraft(const UpdateAircraft::Parameters& parameters, const UpdateAircraft::Callback& cb) = 0; |
|
|
|
protected: |
|
Pilots() = default; |
|
}; |
|
|
|
/// @cond |
|
Pilots::Exclude operator|(Pilots::Exclude, Pilots::Exclude); |
|
Pilots::Exclude operator&(Pilots::Exclude, Pilots::Exclude); |
|
std::ostream& operator<<(std::ostream& out, Pilots::Exclude exclude); |
|
/// @endcond |
|
|
|
} // namespace airmap |
|
|
|
#endif // AIRMAP_PILOTS_H_
|
|
|