/**
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0.
 */

#pragma once
#include <aws/guardduty/GuardDuty_EXPORTS.h>
#include <aws/core/utils/memory/stl/AWSString.h>
#include <aws/core/utils/DateTime.h>
#include <aws/core/utils/memory/stl/AWSVector.h>
#include <aws/guardduty/model/LineageObject.h>
#include <utility>

namespace Aws
{
namespace Utils
{
namespace Json
{
  class JsonValue;
  class JsonView;
} // namespace Json
} // namespace Utils
namespace GuardDuty
{
namespace Model
{

  /**
   * <p>Information about the observed process.</p><p><h3>See Also:</h3>   <a
   * href="http://docs.aws.amazon.com/goto/WebAPI/guardduty-2017-11-28/ProcessDetails">AWS
   * API Reference</a></p>
   */
  class ProcessDetails
  {
  public:
    AWS_GUARDDUTY_API ProcessDetails();
    AWS_GUARDDUTY_API ProcessDetails(Aws::Utils::Json::JsonView jsonValue);
    AWS_GUARDDUTY_API ProcessDetails& operator=(Aws::Utils::Json::JsonView jsonValue);
    AWS_GUARDDUTY_API Aws::Utils::Json::JsonValue Jsonize() const;


    /**
     * <p>The name of the process.</p>
     */
    inline const Aws::String& GetName() const{ return m_name; }

    /**
     * <p>The name of the process.</p>
     */
    inline bool NameHasBeenSet() const { return m_nameHasBeenSet; }

    /**
     * <p>The name of the process.</p>
     */
    inline void SetName(const Aws::String& value) { m_nameHasBeenSet = true; m_name = value; }

    /**
     * <p>The name of the process.</p>
     */
    inline void SetName(Aws::String&& value) { m_nameHasBeenSet = true; m_name = std::move(value); }

    /**
     * <p>The name of the process.</p>
     */
    inline void SetName(const char* value) { m_nameHasBeenSet = true; m_name.assign(value); }

    /**
     * <p>The name of the process.</p>
     */
    inline ProcessDetails& WithName(const Aws::String& value) { SetName(value); return *this;}

    /**
     * <p>The name of the process.</p>
     */
    inline ProcessDetails& WithName(Aws::String&& value) { SetName(std::move(value)); return *this;}

    /**
     * <p>The name of the process.</p>
     */
    inline ProcessDetails& WithName(const char* value) { SetName(value); return *this;}


    /**
     * <p>The absolute path of the process executable file.</p>
     */
    inline const Aws::String& GetExecutablePath() const{ return m_executablePath; }

    /**
     * <p>The absolute path of the process executable file.</p>
     */
    inline bool ExecutablePathHasBeenSet() const { return m_executablePathHasBeenSet; }

    /**
     * <p>The absolute path of the process executable file.</p>
     */
    inline void SetExecutablePath(const Aws::String& value) { m_executablePathHasBeenSet = true; m_executablePath = value; }

    /**
     * <p>The absolute path of the process executable file.</p>
     */
    inline void SetExecutablePath(Aws::String&& value) { m_executablePathHasBeenSet = true; m_executablePath = std::move(value); }

    /**
     * <p>The absolute path of the process executable file.</p>
     */
    inline void SetExecutablePath(const char* value) { m_executablePathHasBeenSet = true; m_executablePath.assign(value); }

    /**
     * <p>The absolute path of the process executable file.</p>
     */
    inline ProcessDetails& WithExecutablePath(const Aws::String& value) { SetExecutablePath(value); return *this;}

    /**
     * <p>The absolute path of the process executable file.</p>
     */
    inline ProcessDetails& WithExecutablePath(Aws::String&& value) { SetExecutablePath(std::move(value)); return *this;}

    /**
     * <p>The absolute path of the process executable file.</p>
     */
    inline ProcessDetails& WithExecutablePath(const char* value) { SetExecutablePath(value); return *this;}


    /**
     * <p>The <code>SHA256</code> hash of the process executable.</p>
     */
    inline const Aws::String& GetExecutableSha256() const{ return m_executableSha256; }

    /**
     * <p>The <code>SHA256</code> hash of the process executable.</p>
     */
    inline bool ExecutableSha256HasBeenSet() const { return m_executableSha256HasBeenSet; }

    /**
     * <p>The <code>SHA256</code> hash of the process executable.</p>
     */
    inline void SetExecutableSha256(const Aws::String& value) { m_executableSha256HasBeenSet = true; m_executableSha256 = value; }

    /**
     * <p>The <code>SHA256</code> hash of the process executable.</p>
     */
    inline void SetExecutableSha256(Aws::String&& value) { m_executableSha256HasBeenSet = true; m_executableSha256 = std::move(value); }

    /**
     * <p>The <code>SHA256</code> hash of the process executable.</p>
     */
    inline void SetExecutableSha256(const char* value) { m_executableSha256HasBeenSet = true; m_executableSha256.assign(value); }

    /**
     * <p>The <code>SHA256</code> hash of the process executable.</p>
     */
    inline ProcessDetails& WithExecutableSha256(const Aws::String& value) { SetExecutableSha256(value); return *this;}

    /**
     * <p>The <code>SHA256</code> hash of the process executable.</p>
     */
    inline ProcessDetails& WithExecutableSha256(Aws::String&& value) { SetExecutableSha256(std::move(value)); return *this;}

    /**
     * <p>The <code>SHA256</code> hash of the process executable.</p>
     */
    inline ProcessDetails& WithExecutableSha256(const char* value) { SetExecutableSha256(value); return *this;}


    /**
     * <p>The ID of the child process.</p>
     */
    inline int GetNamespacePid() const{ return m_namespacePid; }

    /**
     * <p>The ID of the child process.</p>
     */
    inline bool NamespacePidHasBeenSet() const { return m_namespacePidHasBeenSet; }

    /**
     * <p>The ID of the child process.</p>
     */
    inline void SetNamespacePid(int value) { m_namespacePidHasBeenSet = true; m_namespacePid = value; }

    /**
     * <p>The ID of the child process.</p>
     */
    inline ProcessDetails& WithNamespacePid(int value) { SetNamespacePid(value); return *this;}


    /**
     * <p>The present working directory of the process.</p>
     */
    inline const Aws::String& GetPwd() const{ return m_pwd; }

    /**
     * <p>The present working directory of the process.</p>
     */
    inline bool PwdHasBeenSet() const { return m_pwdHasBeenSet; }

    /**
     * <p>The present working directory of the process.</p>
     */
    inline void SetPwd(const Aws::String& value) { m_pwdHasBeenSet = true; m_pwd = value; }

    /**
     * <p>The present working directory of the process.</p>
     */
    inline void SetPwd(Aws::String&& value) { m_pwdHasBeenSet = true; m_pwd = std::move(value); }

    /**
     * <p>The present working directory of the process.</p>
     */
    inline void SetPwd(const char* value) { m_pwdHasBeenSet = true; m_pwd.assign(value); }

    /**
     * <p>The present working directory of the process.</p>
     */
    inline ProcessDetails& WithPwd(const Aws::String& value) { SetPwd(value); return *this;}

    /**
     * <p>The present working directory of the process.</p>
     */
    inline ProcessDetails& WithPwd(Aws::String&& value) { SetPwd(std::move(value)); return *this;}

    /**
     * <p>The present working directory of the process.</p>
     */
    inline ProcessDetails& WithPwd(const char* value) { SetPwd(value); return *this;}


    /**
     * <p>The ID of the process.</p>
     */
    inline int GetPid() const{ return m_pid; }

    /**
     * <p>The ID of the process.</p>
     */
    inline bool PidHasBeenSet() const { return m_pidHasBeenSet; }

    /**
     * <p>The ID of the process.</p>
     */
    inline void SetPid(int value) { m_pidHasBeenSet = true; m_pid = value; }

    /**
     * <p>The ID of the process.</p>
     */
    inline ProcessDetails& WithPid(int value) { SetPid(value); return *this;}


    /**
     * <p>The time when the process started. This is in UTC format.</p>
     */
    inline const Aws::Utils::DateTime& GetStartTime() const{ return m_startTime; }

    /**
     * <p>The time when the process started. This is in UTC format.</p>
     */
    inline bool StartTimeHasBeenSet() const { return m_startTimeHasBeenSet; }

    /**
     * <p>The time when the process started. This is in UTC format.</p>
     */
    inline void SetStartTime(const Aws::Utils::DateTime& value) { m_startTimeHasBeenSet = true; m_startTime = value; }

    /**
     * <p>The time when the process started. This is in UTC format.</p>
     */
    inline void SetStartTime(Aws::Utils::DateTime&& value) { m_startTimeHasBeenSet = true; m_startTime = std::move(value); }

    /**
     * <p>The time when the process started. This is in UTC format.</p>
     */
    inline ProcessDetails& WithStartTime(const Aws::Utils::DateTime& value) { SetStartTime(value); return *this;}

    /**
     * <p>The time when the process started. This is in UTC format.</p>
     */
    inline ProcessDetails& WithStartTime(Aws::Utils::DateTime&& value) { SetStartTime(std::move(value)); return *this;}


    /**
     * <p>The unique ID assigned to the process by GuardDuty.</p>
     */
    inline const Aws::String& GetUuid() const{ return m_uuid; }

    /**
     * <p>The unique ID assigned to the process by GuardDuty.</p>
     */
    inline bool UuidHasBeenSet() const { return m_uuidHasBeenSet; }

    /**
     * <p>The unique ID assigned to the process by GuardDuty.</p>
     */
    inline void SetUuid(const Aws::String& value) { m_uuidHasBeenSet = true; m_uuid = value; }

    /**
     * <p>The unique ID assigned to the process by GuardDuty.</p>
     */
    inline void SetUuid(Aws::String&& value) { m_uuidHasBeenSet = true; m_uuid = std::move(value); }

    /**
     * <p>The unique ID assigned to the process by GuardDuty.</p>
     */
    inline void SetUuid(const char* value) { m_uuidHasBeenSet = true; m_uuid.assign(value); }

    /**
     * <p>The unique ID assigned to the process by GuardDuty.</p>
     */
    inline ProcessDetails& WithUuid(const Aws::String& value) { SetUuid(value); return *this;}

    /**
     * <p>The unique ID assigned to the process by GuardDuty.</p>
     */
    inline ProcessDetails& WithUuid(Aws::String&& value) { SetUuid(std::move(value)); return *this;}

    /**
     * <p>The unique ID assigned to the process by GuardDuty.</p>
     */
    inline ProcessDetails& WithUuid(const char* value) { SetUuid(value); return *this;}


    /**
     * <p>The unique ID of the parent process. This ID is assigned to the parent
     * process by GuardDuty.</p>
     */
    inline const Aws::String& GetParentUuid() const{ return m_parentUuid; }

    /**
     * <p>The unique ID of the parent process. This ID is assigned to the parent
     * process by GuardDuty.</p>
     */
    inline bool ParentUuidHasBeenSet() const { return m_parentUuidHasBeenSet; }

    /**
     * <p>The unique ID of the parent process. This ID is assigned to the parent
     * process by GuardDuty.</p>
     */
    inline void SetParentUuid(const Aws::String& value) { m_parentUuidHasBeenSet = true; m_parentUuid = value; }

    /**
     * <p>The unique ID of the parent process. This ID is assigned to the parent
     * process by GuardDuty.</p>
     */
    inline void SetParentUuid(Aws::String&& value) { m_parentUuidHasBeenSet = true; m_parentUuid = std::move(value); }

    /**
     * <p>The unique ID of the parent process. This ID is assigned to the parent
     * process by GuardDuty.</p>
     */
    inline void SetParentUuid(const char* value) { m_parentUuidHasBeenSet = true; m_parentUuid.assign(value); }

    /**
     * <p>The unique ID of the parent process. This ID is assigned to the parent
     * process by GuardDuty.</p>
     */
    inline ProcessDetails& WithParentUuid(const Aws::String& value) { SetParentUuid(value); return *this;}

    /**
     * <p>The unique ID of the parent process. This ID is assigned to the parent
     * process by GuardDuty.</p>
     */
    inline ProcessDetails& WithParentUuid(Aws::String&& value) { SetParentUuid(std::move(value)); return *this;}

    /**
     * <p>The unique ID of the parent process. This ID is assigned to the parent
     * process by GuardDuty.</p>
     */
    inline ProcessDetails& WithParentUuid(const char* value) { SetParentUuid(value); return *this;}


    /**
     * <p>The user that executed the process.</p>
     */
    inline const Aws::String& GetUser() const{ return m_user; }

    /**
     * <p>The user that executed the process.</p>
     */
    inline bool UserHasBeenSet() const { return m_userHasBeenSet; }

    /**
     * <p>The user that executed the process.</p>
     */
    inline void SetUser(const Aws::String& value) { m_userHasBeenSet = true; m_user = value; }

    /**
     * <p>The user that executed the process.</p>
     */
    inline void SetUser(Aws::String&& value) { m_userHasBeenSet = true; m_user = std::move(value); }

    /**
     * <p>The user that executed the process.</p>
     */
    inline void SetUser(const char* value) { m_userHasBeenSet = true; m_user.assign(value); }

    /**
     * <p>The user that executed the process.</p>
     */
    inline ProcessDetails& WithUser(const Aws::String& value) { SetUser(value); return *this;}

    /**
     * <p>The user that executed the process.</p>
     */
    inline ProcessDetails& WithUser(Aws::String&& value) { SetUser(std::move(value)); return *this;}

    /**
     * <p>The user that executed the process.</p>
     */
    inline ProcessDetails& WithUser(const char* value) { SetUser(value); return *this;}


    /**
     * <p>The unique ID of the user that executed the process.</p>
     */
    inline int GetUserId() const{ return m_userId; }

    /**
     * <p>The unique ID of the user that executed the process.</p>
     */
    inline bool UserIdHasBeenSet() const { return m_userIdHasBeenSet; }

    /**
     * <p>The unique ID of the user that executed the process.</p>
     */
    inline void SetUserId(int value) { m_userIdHasBeenSet = true; m_userId = value; }

    /**
     * <p>The unique ID of the user that executed the process.</p>
     */
    inline ProcessDetails& WithUserId(int value) { SetUserId(value); return *this;}


    /**
     * <p>The effective user ID of the user that executed the process.</p>
     */
    inline int GetEuid() const{ return m_euid; }

    /**
     * <p>The effective user ID of the user that executed the process.</p>
     */
    inline bool EuidHasBeenSet() const { return m_euidHasBeenSet; }

    /**
     * <p>The effective user ID of the user that executed the process.</p>
     */
    inline void SetEuid(int value) { m_euidHasBeenSet = true; m_euid = value; }

    /**
     * <p>The effective user ID of the user that executed the process.</p>
     */
    inline ProcessDetails& WithEuid(int value) { SetEuid(value); return *this;}


    /**
     * <p>Information about the process's lineage.</p>
     */
    inline const Aws::Vector<LineageObject>& GetLineage() const{ return m_lineage; }

    /**
     * <p>Information about the process's lineage.</p>
     */
    inline bool LineageHasBeenSet() const { return m_lineageHasBeenSet; }

    /**
     * <p>Information about the process's lineage.</p>
     */
    inline void SetLineage(const Aws::Vector<LineageObject>& value) { m_lineageHasBeenSet = true; m_lineage = value; }

    /**
     * <p>Information about the process's lineage.</p>
     */
    inline void SetLineage(Aws::Vector<LineageObject>&& value) { m_lineageHasBeenSet = true; m_lineage = std::move(value); }

    /**
     * <p>Information about the process's lineage.</p>
     */
    inline ProcessDetails& WithLineage(const Aws::Vector<LineageObject>& value) { SetLineage(value); return *this;}

    /**
     * <p>Information about the process's lineage.</p>
     */
    inline ProcessDetails& WithLineage(Aws::Vector<LineageObject>&& value) { SetLineage(std::move(value)); return *this;}

    /**
     * <p>Information about the process's lineage.</p>
     */
    inline ProcessDetails& AddLineage(const LineageObject& value) { m_lineageHasBeenSet = true; m_lineage.push_back(value); return *this; }

    /**
     * <p>Information about the process's lineage.</p>
     */
    inline ProcessDetails& AddLineage(LineageObject&& value) { m_lineageHasBeenSet = true; m_lineage.push_back(std::move(value)); return *this; }

  private:

    Aws::String m_name;
    bool m_nameHasBeenSet = false;

    Aws::String m_executablePath;
    bool m_executablePathHasBeenSet = false;

    Aws::String m_executableSha256;
    bool m_executableSha256HasBeenSet = false;

    int m_namespacePid;
    bool m_namespacePidHasBeenSet = false;

    Aws::String m_pwd;
    bool m_pwdHasBeenSet = false;

    int m_pid;
    bool m_pidHasBeenSet = false;

    Aws::Utils::DateTime m_startTime;
    bool m_startTimeHasBeenSet = false;

    Aws::String m_uuid;
    bool m_uuidHasBeenSet = false;

    Aws::String m_parentUuid;
    bool m_parentUuidHasBeenSet = false;

    Aws::String m_user;
    bool m_userHasBeenSet = false;

    int m_userId;
    bool m_userIdHasBeenSet = false;

    int m_euid;
    bool m_euidHasBeenSet = false;

    Aws::Vector<LineageObject> m_lineage;
    bool m_lineageHasBeenSet = false;
  };

} // namespace Model
} // namespace GuardDuty
} // namespace Aws