// -*- C++ -*-
//
// This file was generated by CLI, a command line interface
// compiler for C++.
//

#ifndef BDEP_PROJECT_OPTIONS_HXX
#define BDEP_PROJECT_OPTIONS_HXX

// Begin prologue.
//
//
// End prologue.

#include <bdep/common-options.hxx>

namespace bdep
{
  class configuration_add_options
  {
    public:
    configuration_add_options ();

    // Return true if anything has been parsed.
    //
    bool
    parse (int& argc,
           char** argv,
           bool erase = false,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    bool
    parse (int start,
           int& argc,
           char** argv,
           bool erase = false,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    bool
    parse (int& argc,
           char** argv,
           int& end,
           bool erase = false,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    bool
    parse (int start,
           int& argc,
           char** argv,
           int& end,
           bool erase = false,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    bool
    parse (::bdep::cli::scanner&,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    // Merge options from the specified instance appending/overriding
    // them as if they appeared after options in this instance.
    //
    void
    merge (const configuration_add_options&);

    // Option accessors and modifiers.
    //
    const string&
    type () const;

    string&
    type ();

    void
    type (const string&);

    bool
    type_specified () const;

    void
    type_specified (bool);

    const bool&
    default_ () const;

    bool&
    default_ ();

    void
    default_ (const bool&);

    const bool&
    no_default () const;

    bool&
    no_default ();

    void
    no_default (const bool&);

    const bool&
    forward () const;

    bool&
    forward ();

    void
    forward (const bool&);

    const bool&
    no_forward () const;

    bool&
    no_forward ();

    void
    no_forward (const bool&);

    const bool&
    auto_sync () const;

    bool&
    auto_sync ();

    void
    auto_sync (const bool&);

    const bool&
    no_auto_sync () const;

    bool&
    no_auto_sync ();

    void
    no_auto_sync (const bool&);

    const bool&
    existing () const;

    bool&
    existing ();

    void
    existing (const bool&);

    const bool&
    wipe () const;

    bool&
    wipe ();

    void
    wipe (const bool&);

    // Print usage information.
    //
    static ::bdep::cli::usage_para
    print_usage (::std::ostream&,
                 ::bdep::cli::usage_para = ::bdep::cli::usage_para::none);

    // Option description.
    //
    static const ::bdep::cli::options&
    description ();

    // Implementation details.
    //
    protected:
    friend struct _cli_configuration_add_options_desc_type;

    static void
    fill (::bdep::cli::options&);

    bool
    _parse (const char*, ::bdep::cli::scanner&);

    private:
    bool
    _parse (::bdep::cli::scanner&,
            ::bdep::cli::unknown_mode option,
            ::bdep::cli::unknown_mode argument);

    public:
    string type_;
    bool type_specified_;
    bool default__;
    bool no_default_;
    bool forward_;
    bool no_forward_;
    bool auto_sync_;
    bool no_auto_sync_;
    bool existing_;
    bool wipe_;
  };

  class configuration_name_options: public ::bdep::common_options
  {
    public:
    configuration_name_options ();

    // Return true if anything has been parsed.
    //
    bool
    parse (int& argc,
           char** argv,
           bool erase = false,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    bool
    parse (int start,
           int& argc,
           char** argv,
           bool erase = false,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    bool
    parse (int& argc,
           char** argv,
           int& end,
           bool erase = false,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    bool
    parse (int start,
           int& argc,
           char** argv,
           int& end,
           bool erase = false,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    bool
    parse (::bdep::cli::scanner&,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    // Merge options from the specified instance appending/overriding
    // them as if they appeared after options in this instance.
    //
    void
    merge (const configuration_name_options&);

    // Option accessors and modifiers.
    //
    const vector<pair<string, size_t>>&
    config_name () const;

    vector<pair<string, size_t>>&
    config_name ();

    void
    config_name (const vector<pair<string, size_t>>&);

    bool
    config_name_specified () const;

    void
    config_name_specified (bool);

    const vector<pair<uint64_t, size_t>>&
    config_id () const;

    vector<pair<uint64_t, size_t>>&
    config_id ();

    void
    config_id (const vector<pair<uint64_t, size_t>>&);

    bool
    config_id_specified () const;

    void
    config_id_specified (bool);

    // Print usage information.
    //
    static ::bdep::cli::usage_para
    print_usage (::std::ostream&,
                 ::bdep::cli::usage_para = ::bdep::cli::usage_para::none);

    // Option description.
    //
    static const ::bdep::cli::options&
    description ();

    // Implementation details.
    //
    protected:
    friend struct _cli_configuration_name_options_desc_type;

    static void
    fill (::bdep::cli::options&);

    bool
    _parse (const char*, ::bdep::cli::scanner&);

    private:
    bool
    _parse (::bdep::cli::scanner&,
            ::bdep::cli::unknown_mode option,
            ::bdep::cli::unknown_mode argument);

    public:
    vector<pair<string, size_t>> config_name_;
    bool config_name_specified_;
    vector<pair<uint64_t, size_t>> config_id_;
    bool config_id_specified_;
  };

  class project_options: public ::bdep::configuration_name_options
  {
    public:
    project_options ();

    // Return true if anything has been parsed.
    //
    bool
    parse (int& argc,
           char** argv,
           bool erase = false,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    bool
    parse (int start,
           int& argc,
           char** argv,
           bool erase = false,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    bool
    parse (int& argc,
           char** argv,
           int& end,
           bool erase = false,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    bool
    parse (int start,
           int& argc,
           char** argv,
           int& end,
           bool erase = false,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    bool
    parse (::bdep::cli::scanner&,
           ::bdep::cli::unknown_mode option = ::bdep::cli::unknown_mode::fail,
           ::bdep::cli::unknown_mode argument = ::bdep::cli::unknown_mode::stop);

    // Merge options from the specified instance appending/overriding
    // them as if they appeared after options in this instance.
    //
    void
    merge (const project_options&);

    // Option accessors and modifiers.
    //
    const bool&
    all () const;

    bool&
    all ();

    void
    all (const bool&);

    const vector<pair<dir_path, size_t>>&
    config () const;

    vector<pair<dir_path, size_t>>&
    config ();

    void
    config (const vector<pair<dir_path, size_t>>&);

    bool
    config_specified () const;

    void
    config_specified (bool);

    const dir_paths&
    directory () const;

    dir_paths&
    directory ();

    void
    directory (const dir_paths&);

    bool
    directory_specified () const;

    void
    directory_specified (bool);

    // Print usage information.
    //
    static ::bdep::cli::usage_para
    print_usage (::std::ostream&,
                 ::bdep::cli::usage_para = ::bdep::cli::usage_para::none);

    // Option description.
    //
    static const ::bdep::cli::options&
    description ();

    // Implementation details.
    //
    protected:
    friend struct _cli_project_options_desc_type;

    static void
    fill (::bdep::cli::options&);

    bool
    _parse (const char*, ::bdep::cli::scanner&);

    private:
    bool
    _parse (::bdep::cli::scanner&,
            ::bdep::cli::unknown_mode option,
            ::bdep::cli::unknown_mode argument);

    public:
    bool all_;
    vector<pair<dir_path, size_t>> config_;
    bool config_specified_;
    dir_paths directory_;
    bool directory_specified_;
  };
}

// Print page usage information.
//
namespace bdep
{
  ::bdep::cli::usage_para
  print_project_usage (::std::ostream&,
                       ::bdep::cli::usage_para = ::bdep::cli::usage_para::none);
}

#include <bdep/project-options.ixx>

// Begin epilogue.
//
//
// End epilogue.

#endif // BDEP_PROJECT_OPTIONS_HXX
