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

#ifndef BDEP_RELEASE_OPTIONS_HXX
#define BDEP_RELEASE_OPTIONS_HXX

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

#include <set>

#include <bdep/common-options.hxx>

#include <bdep/release-types.hxx>

namespace bdep
{
  class cmd_release_options: public ::bdep::common_options
  {
    public:
    cmd_release_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 cmd_release_options&);

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

    bool&
    revision ();

    void
    revision (const bool&);

    const bool&
    no_commit () const;

    bool&
    no_commit ();

    void
    no_commit (const bool&);

    const bool&
    no_tag () const;

    bool&
    no_tag ();

    void
    no_tag (const bool&);

    const bool&
    tag () const;

    bool&
    tag ();

    void
    tag (const bool&);

    const cmd_release_current_tag&
    current_tag () const;

    cmd_release_current_tag&
    current_tag ();

    void
    current_tag (const cmd_release_current_tag&);

    bool
    current_tag_specified () const;

    void
    current_tag_specified (bool);

    const bool&
    push () const;

    bool&
    push ();

    void
    push (const bool&);

    const bool&
    show_push () const;

    bool&
    show_push ();

    void
    show_push (const bool&);

    const bool&
    no_open () const;

    bool&
    no_open ();

    void
    no_open (const bool&);

    const bool&
    open () const;

    bool&
    open ();

    void
    open (const bool&);

    const bool&
    amend () const;

    bool&
    amend ();

    void
    amend (const bool&);

    const size_t&
    squash () const;

    size_t&
    squash ();

    void
    squash (const size_t&);

    bool
    squash_specified () const;

    void
    squash_specified (bool);

    const bool&
    alpha () const;

    bool&
    alpha ();

    void
    alpha (const bool&);

    const bool&
    beta () const;

    bool&
    beta ();

    void
    beta (const bool&);

    const bool&
    minor () const;

    bool&
    minor ();

    void
    minor (const bool&);

    const bool&
    major () const;

    bool&
    major ();

    void
    major (const bool&);

    const bool&
    open_beta () const;

    bool&
    open_beta ();

    void
    open_beta (const bool&);

    const bool&
    open_patch () const;

    bool&
    open_patch ();

    void
    open_patch (const bool&);

    const bool&
    open_minor () const;

    bool&
    open_minor ();

    void
    open_minor (const bool&);

    const bool&
    open_major () const;

    bool&
    open_major ();

    void
    open_major (const bool&);

    const string&
    open_base () const;

    string&
    open_base ();

    void
    open_base (const string&);

    bool
    open_base_specified () const;

    void
    open_base_specified (bool);

    const bool&
    edit () const;

    bool&
    edit ();

    void
    edit (const bool&);

    const bool&
    no_edit () const;

    bool&
    no_edit ();

    void
    no_edit (const bool&);

    const std::set<string>&
    force () const;

    std::set<string>&
    force ();

    void
    force (const std::set<string>&);

    bool
    force_specified () const;

    void
    force_specified (bool);

    const bool&
    yes () const;

    bool&
    yes ();

    void
    yes (const 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_cmd_release_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 revision_;
    bool no_commit_;
    bool no_tag_;
    bool tag_;
    cmd_release_current_tag current_tag_;
    bool current_tag_specified_;
    bool push_;
    bool show_push_;
    bool no_open_;
    bool open_;
    bool amend_;
    size_t squash_;
    bool squash_specified_;
    bool alpha_;
    bool beta_;
    bool minor_;
    bool major_;
    bool open_beta_;
    bool open_patch_;
    bool open_minor_;
    bool open_major_;
    string open_base_;
    bool open_base_specified_;
    bool edit_;
    bool no_edit_;
    std::set<string> force_;
    bool force_specified_;
    bool yes_;
    dir_paths directory_;
    bool directory_specified_;
  };
}

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

#include <bdep/release-options.ixx>

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

#endif // BDEP_RELEASE_OPTIONS_HXX
