blob: 380d8049c73861ebbab90d257e85bcc0f8a7bedd [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_DEVELOPER_CMD_APP_H_
#define SRC_DEVELOPER_CMD_APP_H_
#include <lib/fit/function.h>
#include <optional>
#include <string>
#include "src/developer/cmd/console.h"
#include "src/developer/cmd/executor.h"
namespace cmd {
class App : public cmd::Console::Client {
public:
using QuitCallback = fit::closure;
struct Options {
std::optional<std::string> command;
};
explicit App(async_dispatcher_t* dispatcher);
~App() override;
// Initialize the application.
//
// The application will begin processing commands on stdin asynchronously
// using the |dispatcher| provided to the constructor.
//
// The application will call |quit_callback| when the the application is done
// processing commands.
//
// Can be called at most once.
//
// Returns whether initialization succeeds.
bool Init(int argc, const char** argv, QuitCallback quit_callback);
// |cmd::Console::Client| implementation:
zx_status_t OnConsoleCommand(Command command) override;
void OnConsoleInterrupt() override;
void OnConsoleError(zx_status_t status) override;
void OnConsoleAutocomplete(Autocomplete* autocomplete) override;
private:
void Quit();
QuitCallback quit_callback_;
Options options_;
Console console_;
Executor executor_;
};
} // namespace cmd
#endif // SRC_DEVELOPER_CMD_APP_H_