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

#include <aws/awstransfer/model/DescribedSecurityPolicy.h>
#include <aws/core/utils/json/JsonSerializer.h>

#include <utility>

using namespace Aws::Utils::Json;
using namespace Aws::Utils;

namespace Aws
{
namespace Transfer
{
namespace Model
{

DescribedSecurityPolicy::DescribedSecurityPolicy() : 
    m_fips(false),
    m_fipsHasBeenSet(false),
    m_securityPolicyNameHasBeenSet(false),
    m_sshCiphersHasBeenSet(false),
    m_sshKexsHasBeenSet(false),
    m_sshMacsHasBeenSet(false),
    m_tlsCiphersHasBeenSet(false)
{
}

DescribedSecurityPolicy::DescribedSecurityPolicy(JsonView jsonValue) : 
    m_fips(false),
    m_fipsHasBeenSet(false),
    m_securityPolicyNameHasBeenSet(false),
    m_sshCiphersHasBeenSet(false),
    m_sshKexsHasBeenSet(false),
    m_sshMacsHasBeenSet(false),
    m_tlsCiphersHasBeenSet(false)
{
  *this = jsonValue;
}

DescribedSecurityPolicy& DescribedSecurityPolicy::operator =(JsonView jsonValue)
{
  if(jsonValue.ValueExists("Fips"))
  {
    m_fips = jsonValue.GetBool("Fips");

    m_fipsHasBeenSet = true;
  }

  if(jsonValue.ValueExists("SecurityPolicyName"))
  {
    m_securityPolicyName = jsonValue.GetString("SecurityPolicyName");

    m_securityPolicyNameHasBeenSet = true;
  }

  if(jsonValue.ValueExists("SshCiphers"))
  {
    Aws::Utils::Array<JsonView> sshCiphersJsonList = jsonValue.GetArray("SshCiphers");
    for(unsigned sshCiphersIndex = 0; sshCiphersIndex < sshCiphersJsonList.GetLength(); ++sshCiphersIndex)
    {
      m_sshCiphers.push_back(sshCiphersJsonList[sshCiphersIndex].AsString());
    }
    m_sshCiphersHasBeenSet = true;
  }

  if(jsonValue.ValueExists("SshKexs"))
  {
    Aws::Utils::Array<JsonView> sshKexsJsonList = jsonValue.GetArray("SshKexs");
    for(unsigned sshKexsIndex = 0; sshKexsIndex < sshKexsJsonList.GetLength(); ++sshKexsIndex)
    {
      m_sshKexs.push_back(sshKexsJsonList[sshKexsIndex].AsString());
    }
    m_sshKexsHasBeenSet = true;
  }

  if(jsonValue.ValueExists("SshMacs"))
  {
    Aws::Utils::Array<JsonView> sshMacsJsonList = jsonValue.GetArray("SshMacs");
    for(unsigned sshMacsIndex = 0; sshMacsIndex < sshMacsJsonList.GetLength(); ++sshMacsIndex)
    {
      m_sshMacs.push_back(sshMacsJsonList[sshMacsIndex].AsString());
    }
    m_sshMacsHasBeenSet = true;
  }

  if(jsonValue.ValueExists("TlsCiphers"))
  {
    Aws::Utils::Array<JsonView> tlsCiphersJsonList = jsonValue.GetArray("TlsCiphers");
    for(unsigned tlsCiphersIndex = 0; tlsCiphersIndex < tlsCiphersJsonList.GetLength(); ++tlsCiphersIndex)
    {
      m_tlsCiphers.push_back(tlsCiphersJsonList[tlsCiphersIndex].AsString());
    }
    m_tlsCiphersHasBeenSet = true;
  }

  return *this;
}

JsonValue DescribedSecurityPolicy::Jsonize() const
{
  JsonValue payload;

  if(m_fipsHasBeenSet)
  {
   payload.WithBool("Fips", m_fips);

  }

  if(m_securityPolicyNameHasBeenSet)
  {
   payload.WithString("SecurityPolicyName", m_securityPolicyName);

  }

  if(m_sshCiphersHasBeenSet)
  {
   Aws::Utils::Array<JsonValue> sshCiphersJsonList(m_sshCiphers.size());
   for(unsigned sshCiphersIndex = 0; sshCiphersIndex < sshCiphersJsonList.GetLength(); ++sshCiphersIndex)
   {
     sshCiphersJsonList[sshCiphersIndex].AsString(m_sshCiphers[sshCiphersIndex]);
   }
   payload.WithArray("SshCiphers", std::move(sshCiphersJsonList));

  }

  if(m_sshKexsHasBeenSet)
  {
   Aws::Utils::Array<JsonValue> sshKexsJsonList(m_sshKexs.size());
   for(unsigned sshKexsIndex = 0; sshKexsIndex < sshKexsJsonList.GetLength(); ++sshKexsIndex)
   {
     sshKexsJsonList[sshKexsIndex].AsString(m_sshKexs[sshKexsIndex]);
   }
   payload.WithArray("SshKexs", std::move(sshKexsJsonList));

  }

  if(m_sshMacsHasBeenSet)
  {
   Aws::Utils::Array<JsonValue> sshMacsJsonList(m_sshMacs.size());
   for(unsigned sshMacsIndex = 0; sshMacsIndex < sshMacsJsonList.GetLength(); ++sshMacsIndex)
   {
     sshMacsJsonList[sshMacsIndex].AsString(m_sshMacs[sshMacsIndex]);
   }
   payload.WithArray("SshMacs", std::move(sshMacsJsonList));

  }

  if(m_tlsCiphersHasBeenSet)
  {
   Aws::Utils::Array<JsonValue> tlsCiphersJsonList(m_tlsCiphers.size());
   for(unsigned tlsCiphersIndex = 0; tlsCiphersIndex < tlsCiphersJsonList.GetLength(); ++tlsCiphersIndex)
   {
     tlsCiphersJsonList[tlsCiphersIndex].AsString(m_tlsCiphers[tlsCiphersIndex]);
   }
   payload.WithArray("TlsCiphers", std::move(tlsCiphersJsonList));

  }

  return payload;
}

} // namespace Model
} // namespace Transfer
} // namespace Aws