content: module Stratosphere.OpsWorks.Instance.BlockDeviceMappingProperty (
          module Exports, BlockDeviceMappingProperty(..),
          mkBlockDeviceMappingProperty
      ) where
  import qualified Data.Aeson as JSON
  import qualified Stratosphere.Prelude as Prelude
  import Stratosphere.Property
  import {-# SOURCE #-} Stratosphere.OpsWorks.Instance.EbsBlockDeviceProperty as Exports
  import Stratosphere.ResourceProperties
  import Stratosphere.Value
  data BlockDeviceMappingProperty
    = BlockDeviceMappingProperty {deviceName :: (Prelude.Maybe (Value Prelude.Text)),
                                  ebs :: (Prelude.Maybe EbsBlockDeviceProperty),
                                  noDevice :: (Prelude.Maybe (Value Prelude.Text)),
                                  virtualName :: (Prelude.Maybe (Value Prelude.Text))}
    deriving stock (Prelude.Eq, Prelude.Show)
  mkBlockDeviceMappingProperty :: BlockDeviceMappingProperty
  mkBlockDeviceMappingProperty
    = BlockDeviceMappingProperty
        {deviceName = Prelude.Nothing, ebs = Prelude.Nothing,
         noDevice = Prelude.Nothing, virtualName = Prelude.Nothing}
  instance ToResourceProperties BlockDeviceMappingProperty where
    toResourceProperties BlockDeviceMappingProperty {..}
      = ResourceProperties
          {awsType = "AWS::OpsWorks::Instance.BlockDeviceMapping",
           supportsTags = Prelude.False,
           properties = Prelude.fromList
                          (Prelude.catMaybes
                             [(JSON..=) "DeviceName" Prelude.<$> deviceName,
                              (JSON..=) "Ebs" Prelude.<$> ebs,
                              (JSON..=) "NoDevice" Prelude.<$> noDevice,
                              (JSON..=) "VirtualName" Prelude.<$> virtualName])}
  instance JSON.ToJSON BlockDeviceMappingProperty where
    toJSON BlockDeviceMappingProperty {..}
      = JSON.object
          (Prelude.fromList
             (Prelude.catMaybes
                [(JSON..=) "DeviceName" Prelude.<$> deviceName,
                 (JSON..=) "Ebs" Prelude.<$> ebs,
                 (JSON..=) "NoDevice" Prelude.<$> noDevice,
                 (JSON..=) "VirtualName" Prelude.<$> virtualName]))
  instance Property "DeviceName" BlockDeviceMappingProperty where
    type PropertyType "DeviceName" BlockDeviceMappingProperty = Value Prelude.Text
    set newValue BlockDeviceMappingProperty {..}
      = BlockDeviceMappingProperty
          {deviceName = Prelude.pure newValue, ..}
  instance Property "Ebs" BlockDeviceMappingProperty where
    type PropertyType "Ebs" BlockDeviceMappingProperty = EbsBlockDeviceProperty
    set newValue BlockDeviceMappingProperty {..}
      = BlockDeviceMappingProperty {ebs = Prelude.pure newValue, ..}
  instance Property "NoDevice" BlockDeviceMappingProperty where
    type PropertyType "NoDevice" BlockDeviceMappingProperty = Value Prelude.Text
    set newValue BlockDeviceMappingProperty {..}
      = BlockDeviceMappingProperty {noDevice = Prelude.pure newValue, ..}
  instance Property "VirtualName" BlockDeviceMappingProperty where
    type PropertyType "VirtualName" BlockDeviceMappingProperty = Value Prelude.Text
    set newValue BlockDeviceMappingProperty {..}
      = BlockDeviceMappingProperty
          {virtualName = Prelude.pure newValue, ..}