packages feed

wireform-proto-0.1.0.0: src/Proto/Google/Protobuf/Compiler/Plugin.hs

{-# LANGUAGE StrictData #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE OverloadedRecordDot #-}
-- | Auto-generated protobuf types from package @google.protobuf.compiler@.
--
-- __THIS FILE IS AUTO-GENERATED BY wireform. DO NOT EDIT.__
--
-- Any manual changes will be overwritten the next time code
-- generation is run.  To modify the types or instances, edit the
-- @.proto@ source file and re-run the code generator.
module Proto.Google.Protobuf.Compiler.Plugin where

import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
import qualified Wireform.Builder as B
import Data.Int (Int32, Int64)
import Data.Text (Text)
import qualified Data.Text as T
import Data.Word (Word8, Word32, Word64)
import qualified Data.IntMap.Strict as IntMap
import qualified Data.Map.Strict as Map
import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as VU
import GHC.Generics (Generic)
import Control.DeepSeq (NFData(..))
import Data.Hashable (Hashable(..))
import Proto.Internal.Encode
import Proto.Internal.Decode
import Proto.Internal.GrowList (GrowList, emptyGrowList, snocGrowList, growListToVector)
import qualified Data.Aeson as Aeson
import qualified Data.Aeson.Types as Aeson
import qualified Data.Aeson.Key as AesonKey
import qualified Data.Aeson.KeyMap as AesonKM
import Proto.Internal.JSON (jsonObject, (.=:), parseFieldMaybe, bytesFieldToJSON, parseBytesFieldMaybe, bytesMapFieldToJSON, parseBytesMapFieldMaybe, protoBytesToJSON, OneofVariantNullSemantics (..), parseOneofVariants)
import Data.Proxy (Proxy(..))
import Proto.Schema (ProtoMessage(..), SomeFieldDescriptor(..), FieldDescriptor(..), FieldTypeDescriptor(..), ScalarFieldType(..), FieldLabel'(..))
import Proto.Registry (IsMessage)
import Proto.Registry qualified
import qualified Proto.Extension
import Proto.Internal.Wire (Tag(..), WireType(..))
import Proto.Internal.Wire.Encode (putTag, putVarint, putFixed32, putFixed64,
  putFloat, putDouble, putText, putByteString, putLengthDelimited,
  putSVarint32, putSVarint64, putVarintSigned,
  varintSize, tagSize,
  varintSize32, zigZag32, zigZag64)
import Proto.Internal.Encode.Archetype (archVarint, archSVarint32, archSVarint64,
  archFixed32, archFixed64, archFloat, archDouble, archBool,
  archString, archBytes, archSubmessage)
import qualified Proto.Google.Protobuf.Reflection.Descriptor as PB_Reflection_Descriptor

-- | Serialized FileDescriptorProto for this .proto file.
-- Decode with @Proto.Decode.decodeMessage@.
fileDescriptorProtoBytes :: ByteString
fileDescriptorProtoBytes = "\x0a\x25\x67\x6f\x6f\x67\x6c\x65\x2f\x70\x72\x6f\x74\x6f\x62\x75\x66\x2f\x63\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x70\x6c\x75\x67\x69\x6e\x2e\x70\x72\x6f\x74\x6f\x12\x18\x67\x6f\x6f\x67\x6c\x65\x2e\x70\x72\x6f\x74\x6f\x62\x75\x66\x2e\x63\x6f\x6d\x70\x69\x6c\x65\x72\x1a\x20\x67\x6f\x6f\x67\x6c\x65\x2f\x70\x72\x6f\x74\x6f\x62\x75\x66\x2f\x64\x65\x73\x63\x72\x69\x70\x74\x6f\x72\x2e\x70\x72\x6f\x74\x6f\x22\x46\x0a\x07\x56\x65\x72\x73\x69\x6f\x6e\x12\x0d\x0a\x05\x6d\x61\x6a\x6f\x72\x18\x01\x20\x01\x28\x05\x12\x0d\x0a\x05\x6d\x69\x6e\x6f\x72\x18\x02\x20\x01\x28\x05\x12\x0d\x0a\x05\x70\x61\x74\x63\x68\x18\x03\x20\x01\x28\x05\x12\x0e\x0a\x06\x73\x75\x66\x66\x69\x78\x18\x04\x20\x01\x28\x09\x22\xc5\x01\x0a\x14\x43\x6f\x64\x65\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x52\x65\x71\x75\x65\x73\x74\x12\x18\x0a\x10\x66\x69\x6c\x65\x5f\x74\x6f\x5f\x67\x65\x6e\x65\x72\x61\x74\x65\x18\x01\x20\x03\x28\x09\x12\x11\x0a\x09\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x18\x02\x20\x01\x28\x09\x12\x27\x0a\x0a\x70\x72\x6f\x74\x6f\x5f\x66\x69\x6c\x65\x18\x0f\x20\x03\x28\x0b\x32\x13\x46\x69\x6c\x65\x44\x65\x73\x63\x72\x69\x70\x74\x6f\x72\x50\x72\x6f\x74\x6f\x12\x34\x0a\x17\x73\x6f\x75\x72\x63\x65\x5f\x66\x69\x6c\x65\x5f\x64\x65\x73\x63\x72\x69\x70\x74\x6f\x72\x73\x18\x11\x20\x03\x28\x0b\x32\x13\x46\x69\x6c\x65\x44\x65\x73\x63\x72\x69\x70\x74\x6f\x72\x50\x72\x6f\x74\x6f\x12\x21\x0a\x10\x63\x6f\x6d\x70\x69\x6c\x65\x72\x5f\x76\x65\x72\x73\x69\x6f\x6e\x18\x03\x20\x01\x28\x0b\x32\x07\x56\x65\x72\x73\x69\x6f\x6e\x22\xd1\x02\x0a\x15\x43\x6f\x64\x65\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x52\x65\x73\x70\x6f\x6e\x73\x65\x12\x0d\x0a\x05\x65\x72\x72\x6f\x72\x18\x01\x20\x01\x28\x09\x12\x1a\x0a\x12\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x5f\x66\x65\x61\x74\x75\x72\x65\x73\x18\x02\x20\x01\x28\x04\x12\x17\x0a\x0f\x6d\x69\x6e\x69\x6d\x75\x6d\x5f\x65\x64\x69\x74\x69\x6f\x6e\x18\x03\x20\x01\x28\x05\x12\x17\x0a\x0f\x6d\x61\x78\x69\x6d\x75\x6d\x5f\x65\x64\x69\x74\x69\x6f\x6e\x18\x04\x20\x01\x28\x05\x12\x12\x0a\x04\x66\x69\x6c\x65\x18\x0f\x20\x03\x28\x0b\x32\x04\x46\x69\x6c\x65\x1a\x6e\x0a\x04\x46\x69\x6c\x65\x12\x0c\x0a\x04\x6e\x61\x6d\x65\x18\x01\x20\x01\x28\x09\x12\x17\x0a\x0f\x69\x6e\x73\x65\x72\x74\x69\x6f\x6e\x5f\x70\x6f\x69\x6e\x74\x18\x02\x20\x01\x28\x09\x12\x0f\x0a\x07\x63\x6f\x6e\x74\x65\x6e\x74\x18\x0f\x20\x01\x28\x09\x12\x2e\x0a\x13\x67\x65\x6e\x65\x72\x61\x74\x65\x64\x5f\x63\x6f\x64\x65\x5f\x69\x6e\x66\x6f\x18\x10\x20\x01\x28\x0b\x32\x11\x47\x65\x6e\x65\x72\x61\x74\x65\x64\x43\x6f\x64\x65\x49\x6e\x66\x6f\x22\x57\x0a\x07\x46\x65\x61\x74\x75\x72\x65\x12\x10\x0a\x0c\x46\x45\x41\x54\x55\x52\x45\x5f\x4e\x4f\x4e\x45\x10\x00\x12\x1b\x0a\x17\x46\x45\x41\x54\x55\x52\x45\x5f\x50\x52\x4f\x54\x4f\x33\x5f\x4f\x50\x54\x49\x4f\x4e\x41\x4c\x10\x01\x12\x1d\x0a\x19\x46\x45\x41\x54\x55\x52\x45\x5f\x53\x55\x50\x50\x4f\x52\x54\x53\x5f\x45\x44\x49\x54\x49\x4f\x4e\x53\x10\x02\x62\x06\x70\x72\x6f\x74\x6f\x32"


-- | The version number of protocol compiler.
data Version = Version
  { versionMajor :: !(Maybe Int32)
  , versionMinor :: !(Maybe Int32)
  , versionPatch :: !(Maybe Int32)
  , versionSuffix :: !(Maybe Text)
    -- ^ A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should
    -- be empty for mainline stable releases.
  , versionUnknownFields :: ![UnknownField]
  }
  deriving stock (Show, Eq, Generic)
  deriving anyclass NFData

defaultVersion :: Version
defaultVersion = Version
  { versionMajor = Nothing
  , versionMinor = Nothing
  , versionPatch = Nothing
  , versionSuffix = Nothing
  , versionUnknownFields = []
  }

instance MessageEncode Version where
  buildSized msg =
    (maybe mempty (\v -> archVarint 8 (fromIntegral v)) msg.versionMajor)
    <> (maybe mempty (\v -> archVarint 16 (fromIntegral v)) msg.versionMinor)
    <> (maybe mempty (\v -> archVarint 24 (fromIntegral v)) msg.versionPatch)
    <> (maybe mempty (\v -> archString 34 v) msg.versionSuffix)
    <> encodeUnknownFieldsSized msg.versionUnknownFields

instance MessageDecode Version where
  {-# INLINE messageDecoder #-}
  messageDecoder = stage_0 defaultVersion
    where
      stage_0 msg =
        inOrderStage1
          (0x8 :: Data.Word.Word8)
          (fromIntegral <$> decodeFieldVarint)
          (\v -> stage_1 (msg { versionMajor = (Just v)}))
          (pure (case msg.versionUnknownFields of { [] -> msg; _ -> msg { versionUnknownFields = reverse (msg.versionUnknownFields) } }))
          (loop msg)
      stage_1 msg =
        inOrderStage1
          (0x10 :: Data.Word.Word8)
          (fromIntegral <$> decodeFieldVarint)
          (\v -> stage_2 (msg { versionMinor = (Just v)}))
          (pure (case msg.versionUnknownFields of { [] -> msg; _ -> msg { versionUnknownFields = reverse (msg.versionUnknownFields) } }))
          (loop msg)
      stage_2 msg =
        inOrderStage1
          (0x18 :: Data.Word.Word8)
          (fromIntegral <$> decodeFieldVarint)
          (\v -> stage_3 (msg { versionPatch = (Just v)}))
          (pure (case msg.versionUnknownFields of { [] -> msg; _ -> msg { versionUnknownFields = reverse (msg.versionUnknownFields) } }))
          (loop msg)
      stage_3 msg =
        inOrderStage1
          (0x22 :: Data.Word.Word8)
          decodeFieldString
          (\v -> loop (msg { versionSuffix = (Just v)}))
          (pure (case msg.versionUnknownFields of { [] -> msg; _ -> msg { versionUnknownFields = reverse (msg.versionUnknownFields) } }))
          (loop msg)
      loop msg = withTagM
        (pure (case msg.versionUnknownFields of { [] -> msg; _ -> msg { versionUnknownFields = reverse (msg.versionUnknownFields) } }))
        (\fn wt -> case fn of
          1 -> do
            v <- (fromIntegral <$> decodeFieldVarint)
            loop (msg { versionMajor = (Just v)})
          2 -> do
            v <- (fromIntegral <$> decodeFieldVarint)
            loop (msg { versionMinor = (Just v)})
          3 -> do
            v <- (fromIntegral <$> decodeFieldVarint)
            loop (msg { versionPatch = (Just v)})
          4 -> do
            v <- decodeFieldString
            loop (msg { versionSuffix = (Just v)})
          _ -> do
            uf <- captureUnknownField fn (Prelude.toEnum wt)
            loop (msg { versionUnknownFields = (uf : msg.versionUnknownFields)}))

-- | Field descriptors for 'Version', keyed by proto field number.
--
-- Top-level CAF: allocated lazily on first force, shared on every
-- subsequent 'protoFieldDescriptors' call (no per-call rebuild).
versionFieldDescriptors :: IntMap.IntMap (SomeFieldDescriptor Version)
versionFieldDescriptors =
  IntMap.fromList
    [ (1, SomeField FieldDescriptor
        { fdName = "major"
        , fdNumber = 1
        , fdTypeDesc = ScalarType Int32Field
        , fdLabel = LabelOptional
        , fdGet = versionMajor
        , fdSet = \v m -> m { versionMajor = v }
        }), (2, SomeField FieldDescriptor
        { fdName = "minor"
        , fdNumber = 2
        , fdTypeDesc = ScalarType Int32Field
        , fdLabel = LabelOptional
        , fdGet = versionMinor
        , fdSet = \v m -> m { versionMinor = v }
        })
    , (3, SomeField FieldDescriptor
        { fdName = "patch"
        , fdNumber = 3
        , fdTypeDesc = ScalarType Int32Field
        , fdLabel = LabelOptional
        , fdGet = versionPatch
        , fdSet = \v m -> m { versionPatch = v }
        })
    , (4, SomeField FieldDescriptor
        { fdName = "suffix"
        , fdNumber = 4
        , fdTypeDesc = ScalarType StringField
        , fdLabel = LabelOptional
        , fdGet = versionSuffix
        , fdSet = \v m -> m { versionSuffix = v }
        })
    ]

instance ProtoMessage Version where
  protoMessageName _ = "google.protobuf.compiler.Version"
  protoPackageName _ = "google.protobuf.compiler"
  protoDefaultValue = defaultVersion
  protoFileDescriptorBytes _ = fileDescriptorProtoBytes
  protoFieldDescriptors _ = versionFieldDescriptors

instance IsMessage Version

instance Aeson.ToJSON Version where
  toJSON msg = jsonObject
      [ "major" .=: msg.versionMajor
      , "minor" .=: msg.versionMinor
      , "patch" .=: msg.versionPatch
      , "suffix" .=: msg.versionSuffix
      ]

instance Aeson.FromJSON Version where
  parseJSON = Aeson.withObject "Version" $ \obj -> do
    fld_versionMajor <- parseFieldMaybe obj "major"
    fld_versionMinor <- parseFieldMaybe obj "minor"
    fld_versionPatch <- parseFieldMaybe obj "patch"
    fld_versionSuffix <- parseFieldMaybe obj "suffix"
    pure defaultVersion
      { versionMajor = maybe (versionMajor defaultVersion) id fld_versionMajor
      , versionMinor = maybe (versionMinor defaultVersion) id fld_versionMinor
      , versionPatch = maybe (versionPatch defaultVersion) id fld_versionPatch
      , versionSuffix = maybe (versionSuffix defaultVersion) id fld_versionSuffix
      }

instance Hashable Version where
  hashWithSalt salt msg = hashWithSalt (hashWithSalt (hashWithSalt (hashWithSalt (salt) msg.versionMajor) msg.versionMinor) msg.versionPatch) msg.versionSuffix

instance Proto.Extension.HasExtensions Version where
  messageUnknownFields = versionUnknownFields
  setMessageUnknownFields !ufs msg = msg { versionUnknownFields = ufs }

instance Semigroup Version where
  a <> b = Version
    { versionMajor = case b.versionMajor of { Nothing -> a.versionMajor; x -> x }
    , versionMinor = case b.versionMinor of { Nothing -> a.versionMinor; x -> x }
    , versionPatch = case b.versionPatch of { Nothing -> a.versionPatch; x -> x }
    , versionSuffix = case b.versionSuffix of { Nothing -> a.versionSuffix; x -> x }
    , versionUnknownFields = a.versionUnknownFields <> b.versionUnknownFields
    }

instance Monoid Version where
  mempty = defaultVersion

-- | An encoded CodeGeneratorRequest is written to the plugin's stdin.
data CodeGeneratorRequest = CodeGeneratorRequest
  { codeGeneratorRequestFileToGenerate :: !(V.Vector Text)
    -- ^ The .proto files that were explicitly listed on the command-line.  The
    -- code generator should generate code only for these files.  Each file's
    -- descriptor will be included in proto_file, below.
  , codeGeneratorRequestParameter :: !(Maybe Text)
    -- ^ The generator parameter passed on the command-line.
  , codeGeneratorRequestProtoFile :: !(V.Vector PB_Reflection_Descriptor.FileDescriptorProto)
    -- ^ FileDescriptorProtos for all files in files_to_generate and everything
    -- they import.  The files will appear in topological order, so each file
    -- appears before any file that imports it.
    -- 
    -- Note: the files listed in files_to_generate will include runtime-retention
    -- options only, but all other files will include source-retention options.
    -- The source_file_descriptors field below is available in case you need
    -- source-retention options for files_to_generate.
    -- 
    -- protoc guarantees that all proto_files will be written after
    -- the fields above, even though this is not technically guaranteed by the
    -- protobuf wire format.  This theoretically could allow a plugin to stream
    -- in the FileDescriptorProtos and handle them one by one rather than read
    -- the entire set into memory at once.  However, as of this writing, this
    -- is not similarly optimized on protoc's end -- it will store all fields in
    -- memory at once before sending them to the plugin.
    -- 
    -- Type names of fields and extensions in the FileDescriptorProto are always
    -- fully qualified.
  , codeGeneratorRequestSourceFileDescriptors :: !(V.Vector PB_Reflection_Descriptor.FileDescriptorProto)
    -- ^ File descriptors with all options, including source-retention options.
    -- These descriptors are only provided for the files listed in
    -- files_to_generate.
  , codeGeneratorRequestCompilerVersion :: !(Maybe Version)
    -- ^ The version number of protocol compiler.
  , codeGeneratorRequestUnknownFields :: ![UnknownField]
  }
  deriving stock (Show, Eq, Generic)
  deriving anyclass NFData

defaultCodeGeneratorRequest :: CodeGeneratorRequest
defaultCodeGeneratorRequest = CodeGeneratorRequest
  { codeGeneratorRequestFileToGenerate = V.empty
  , codeGeneratorRequestParameter = Nothing
  , codeGeneratorRequestProtoFile = V.empty
  , codeGeneratorRequestSourceFileDescriptors = V.empty
  , codeGeneratorRequestCompilerVersion = Nothing
  , codeGeneratorRequestUnknownFields = []
  }

instance MessageEncode CodeGeneratorRequest where
  buildSized msg =
    V.foldl' (\acc v -> acc <> archString 10 v) mempty msg.codeGeneratorRequestFileToGenerate
    <> (maybe mempty (\v -> archString 18 v) msg.codeGeneratorRequestParameter)
    <> V.foldl' (\acc v -> acc <> archSubmessage 122 (buildSized v)) mempty msg.codeGeneratorRequestProtoFile
    <> V.foldl' (\acc v -> acc <> archSubmessage 138 (buildSized v)) mempty msg.codeGeneratorRequestSourceFileDescriptors
    <> (maybe mempty (\v -> archSubmessage 26 (buildSized v)) msg.codeGeneratorRequestCompilerVersion)
    <> encodeUnknownFieldsSized msg.codeGeneratorRequestUnknownFields

instance MessageDecode CodeGeneratorRequest where
  {-# INLINE messageDecoder #-}
  messageDecoder = stage_0 defaultCodeGeneratorRequest emptyGrowList emptyGrowList emptyGrowList
    where
      stage_0 msg gl_0 gl_1 gl_2 =
        inOrderStage1
          (0xa :: Data.Word.Word8)
          decodeFieldString
          (\v -> stage_0 msg (snocGrowList gl_0 v) gl_1 gl_2)
          (pure (case msg.codeGeneratorRequestUnknownFields of { [] -> msg { codeGeneratorRequestFileToGenerate = growListToVector gl_0, codeGeneratorRequestProtoFile = growListToVector gl_1, codeGeneratorRequestSourceFileDescriptors = growListToVector gl_2 }; _ -> msg { codeGeneratorRequestFileToGenerate = growListToVector gl_0, codeGeneratorRequestProtoFile = growListToVector gl_1, codeGeneratorRequestSourceFileDescriptors = growListToVector gl_2, codeGeneratorRequestUnknownFields = reverse (msg.codeGeneratorRequestUnknownFields) } }))
          (loop msg gl_0 gl_1 gl_2)
      stage_1 msg gl_0 gl_1 gl_2 =
        inOrderStage1
          (0x12 :: Data.Word.Word8)
          decodeFieldString
          (\v -> stage_2 (msg { codeGeneratorRequestParameter = (Just v)}) gl_0 gl_1 gl_2)
          (pure (case msg.codeGeneratorRequestUnknownFields of { [] -> msg { codeGeneratorRequestFileToGenerate = growListToVector gl_0, codeGeneratorRequestProtoFile = growListToVector gl_1, codeGeneratorRequestSourceFileDescriptors = growListToVector gl_2 }; _ -> msg { codeGeneratorRequestFileToGenerate = growListToVector gl_0, codeGeneratorRequestProtoFile = growListToVector gl_1, codeGeneratorRequestSourceFileDescriptors = growListToVector gl_2, codeGeneratorRequestUnknownFields = reverse (msg.codeGeneratorRequestUnknownFields) } }))
          (loop msg gl_0 gl_1 gl_2)
      stage_2 msg gl_0 gl_1 gl_2 =
        inOrderStage1
          (0x7a :: Data.Word.Word8)
          decodeFieldMessage
          (\v -> stage_2 msg gl_0 (snocGrowList gl_1 v) gl_2)
          (pure (case msg.codeGeneratorRequestUnknownFields of { [] -> msg { codeGeneratorRequestFileToGenerate = growListToVector gl_0, codeGeneratorRequestProtoFile = growListToVector gl_1, codeGeneratorRequestSourceFileDescriptors = growListToVector gl_2 }; _ -> msg { codeGeneratorRequestFileToGenerate = growListToVector gl_0, codeGeneratorRequestProtoFile = growListToVector gl_1, codeGeneratorRequestSourceFileDescriptors = growListToVector gl_2, codeGeneratorRequestUnknownFields = reverse (msg.codeGeneratorRequestUnknownFields) } }))
          (loop msg gl_0 gl_1 gl_2)
      stage_3 msg gl_0 gl_1 gl_2 =
        inOrderStage
          0x18a
          0xffff
          2
          decodeFieldMessage
          (\v -> stage_3 msg gl_0 gl_1 (snocGrowList gl_2 v))
          (pure (case msg.codeGeneratorRequestUnknownFields of { [] -> msg { codeGeneratorRequestFileToGenerate = growListToVector gl_0, codeGeneratorRequestProtoFile = growListToVector gl_1, codeGeneratorRequestSourceFileDescriptors = growListToVector gl_2 }; _ -> msg { codeGeneratorRequestFileToGenerate = growListToVector gl_0, codeGeneratorRequestProtoFile = growListToVector gl_1, codeGeneratorRequestSourceFileDescriptors = growListToVector gl_2, codeGeneratorRequestUnknownFields = reverse (msg.codeGeneratorRequestUnknownFields) } }))
          (loop msg gl_0 gl_1 gl_2)
      stage_4 msg gl_0 gl_1 gl_2 =
        inOrderStage1
          (0x1a :: Data.Word.Word8)
          decodeFieldMessage
          (\v -> loop (msg { codeGeneratorRequestCompilerVersion = (Just v)}) gl_0 gl_1 gl_2)
          (pure (case msg.codeGeneratorRequestUnknownFields of { [] -> msg { codeGeneratorRequestFileToGenerate = growListToVector gl_0, codeGeneratorRequestProtoFile = growListToVector gl_1, codeGeneratorRequestSourceFileDescriptors = growListToVector gl_2 }; _ -> msg { codeGeneratorRequestFileToGenerate = growListToVector gl_0, codeGeneratorRequestProtoFile = growListToVector gl_1, codeGeneratorRequestSourceFileDescriptors = growListToVector gl_2, codeGeneratorRequestUnknownFields = reverse (msg.codeGeneratorRequestUnknownFields) } }))
          (loop msg gl_0 gl_1 gl_2)
      loop msg gl_0 gl_1 gl_2 = withTagM
        (pure (case msg.codeGeneratorRequestUnknownFields of { [] -> msg { codeGeneratorRequestFileToGenerate = growListToVector gl_0, codeGeneratorRequestProtoFile = growListToVector gl_1, codeGeneratorRequestSourceFileDescriptors = growListToVector gl_2 }; _ -> msg { codeGeneratorRequestFileToGenerate = growListToVector gl_0, codeGeneratorRequestProtoFile = growListToVector gl_1, codeGeneratorRequestSourceFileDescriptors = growListToVector gl_2, codeGeneratorRequestUnknownFields = reverse (msg.codeGeneratorRequestUnknownFields) } }))
        (\fn wt -> case fn of
          1 -> do
            v <- decodeFieldString
            loop msg (snocGrowList gl_0 v) gl_1 gl_2
          2 -> do
            v <- decodeFieldString
            loop (msg { codeGeneratorRequestParameter = (Just v)}) gl_0 gl_1 gl_2
          15 -> do
            v <- decodeFieldMessage
            loop msg gl_0 (snocGrowList gl_1 v) gl_2
          17 -> do
            v <- decodeFieldMessage
            loop msg gl_0 gl_1 (snocGrowList gl_2 v)
          3 -> do
            v <- decodeFieldMessage
            loop (msg { codeGeneratorRequestCompilerVersion = (Just v)}) gl_0 gl_1 gl_2
          _ -> do
            uf <- captureUnknownField fn (Prelude.toEnum wt)
            loop (msg { codeGeneratorRequestUnknownFields = (uf : msg.codeGeneratorRequestUnknownFields)}) gl_0 gl_1 gl_2)

-- | Field descriptors for 'CodeGeneratorRequest', keyed by proto field number.
--
-- Top-level CAF: allocated lazily on first force, shared on every
-- subsequent 'protoFieldDescriptors' call (no per-call rebuild).
codeGeneratorRequestFieldDescriptors :: IntMap.IntMap (SomeFieldDescriptor CodeGeneratorRequest)
codeGeneratorRequestFieldDescriptors =
  IntMap.fromList
    [ (1, SomeField FieldDescriptor
        { fdName = "file_to_generate"
        , fdNumber = 1
        , fdTypeDesc = ScalarType StringField
        , fdLabel = LabelRepeated
        , fdGet = codeGeneratorRequestFileToGenerate
        , fdSet = \v m -> m { codeGeneratorRequestFileToGenerate = v }
        }), (2, SomeField FieldDescriptor
        { fdName = "parameter"
        , fdNumber = 2
        , fdTypeDesc = ScalarType StringField
        , fdLabel = LabelOptional
        , fdGet = codeGeneratorRequestParameter
        , fdSet = \v m -> m { codeGeneratorRequestParameter = v }
        })
    , (15, SomeField FieldDescriptor
        { fdName = "proto_file"
        , fdNumber = 15
        , fdTypeDesc = MessageType "FileDescriptorProto"
        , fdLabel = LabelRepeated
        , fdGet = codeGeneratorRequestProtoFile
        , fdSet = \v m -> m { codeGeneratorRequestProtoFile = v }
        })
    , (17, SomeField FieldDescriptor
        { fdName = "source_file_descriptors"
        , fdNumber = 17
        , fdTypeDesc = MessageType "FileDescriptorProto"
        , fdLabel = LabelRepeated
        , fdGet = codeGeneratorRequestSourceFileDescriptors
        , fdSet = \v m -> m { codeGeneratorRequestSourceFileDescriptors = v }
        })
    , (3, SomeField FieldDescriptor
        { fdName = "compiler_version"
        , fdNumber = 3
        , fdTypeDesc = MessageType "Version"
        , fdLabel = LabelOptional
        , fdGet = codeGeneratorRequestCompilerVersion
        , fdSet = \v m -> m { codeGeneratorRequestCompilerVersion = v }
        })
    ]

instance ProtoMessage CodeGeneratorRequest where
  protoMessageName _ = "google.protobuf.compiler.CodeGeneratorRequest"
  protoPackageName _ = "google.protobuf.compiler"
  protoDefaultValue = defaultCodeGeneratorRequest
  protoFileDescriptorBytes _ = fileDescriptorProtoBytes
  protoFieldDescriptors _ = codeGeneratorRequestFieldDescriptors

instance IsMessage CodeGeneratorRequest

instance Aeson.ToJSON CodeGeneratorRequest where
  toJSON msg = jsonObject
      [ "fileToGenerate" .=: msg.codeGeneratorRequestFileToGenerate
      , "parameter" .=: msg.codeGeneratorRequestParameter
      , "protoFile" .=: msg.codeGeneratorRequestProtoFile
      , "sourceFileDescriptors" .=: msg.codeGeneratorRequestSourceFileDescriptors
      , "compilerVersion" .=: msg.codeGeneratorRequestCompilerVersion
      ]

instance Aeson.FromJSON CodeGeneratorRequest where
  parseJSON = Aeson.withObject "CodeGeneratorRequest" $ \obj -> do
    fld_codeGeneratorRequestFileToGenerate <- parseFieldMaybe obj "fileToGenerate"
    fld_codeGeneratorRequestParameter <- parseFieldMaybe obj "parameter"
    fld_codeGeneratorRequestProtoFile <- parseFieldMaybe obj "protoFile"
    fld_codeGeneratorRequestSourceFileDescriptors <- parseFieldMaybe obj "sourceFileDescriptors"
    fld_codeGeneratorRequestCompilerVersion <- parseFieldMaybe obj "compilerVersion"
    pure defaultCodeGeneratorRequest
      { codeGeneratorRequestFileToGenerate = maybe (codeGeneratorRequestFileToGenerate defaultCodeGeneratorRequest) id fld_codeGeneratorRequestFileToGenerate
      , codeGeneratorRequestParameter = maybe (codeGeneratorRequestParameter defaultCodeGeneratorRequest) id fld_codeGeneratorRequestParameter
      , codeGeneratorRequestProtoFile = maybe (codeGeneratorRequestProtoFile defaultCodeGeneratorRequest) id fld_codeGeneratorRequestProtoFile
      , codeGeneratorRequestSourceFileDescriptors = maybe (codeGeneratorRequestSourceFileDescriptors defaultCodeGeneratorRequest) id fld_codeGeneratorRequestSourceFileDescriptors
      , codeGeneratorRequestCompilerVersion = maybe (codeGeneratorRequestCompilerVersion defaultCodeGeneratorRequest) id fld_codeGeneratorRequestCompilerVersion
      }

instance Hashable CodeGeneratorRequest where
  hashWithSalt salt msg = hashWithSalt (V.foldl' hashWithSalt (V.foldl' hashWithSalt (hashWithSalt (V.foldl' hashWithSalt (salt) msg.codeGeneratorRequestFileToGenerate) msg.codeGeneratorRequestParameter) msg.codeGeneratorRequestProtoFile) msg.codeGeneratorRequestSourceFileDescriptors) msg.codeGeneratorRequestCompilerVersion

instance Proto.Extension.HasExtensions CodeGeneratorRequest where
  messageUnknownFields = codeGeneratorRequestUnknownFields
  setMessageUnknownFields !ufs msg = msg { codeGeneratorRequestUnknownFields = ufs }

instance Semigroup CodeGeneratorRequest where
  a <> b = CodeGeneratorRequest
    { codeGeneratorRequestFileToGenerate = a.codeGeneratorRequestFileToGenerate <> b.codeGeneratorRequestFileToGenerate
    , codeGeneratorRequestParameter = case b.codeGeneratorRequestParameter of { Nothing -> a.codeGeneratorRequestParameter; x -> x }
    , codeGeneratorRequestProtoFile = a.codeGeneratorRequestProtoFile <> b.codeGeneratorRequestProtoFile
    , codeGeneratorRequestSourceFileDescriptors = a.codeGeneratorRequestSourceFileDescriptors <> b.codeGeneratorRequestSourceFileDescriptors
    , codeGeneratorRequestCompilerVersion = case b.codeGeneratorRequestCompilerVersion of { Nothing -> a.codeGeneratorRequestCompilerVersion; x -> x }
    , codeGeneratorRequestUnknownFields = a.codeGeneratorRequestUnknownFields <> b.codeGeneratorRequestUnknownFields
    }

instance Monoid CodeGeneratorRequest where
  mempty = defaultCodeGeneratorRequest

-- | The plugin writes an encoded CodeGeneratorResponse to stdout.
data CodeGeneratorResponse = CodeGeneratorResponse
  { codeGeneratorResponseError :: !(Maybe Text)
    -- ^ Error message.  If non-empty, code generation failed.  The plugin process
    -- should exit with status code zero even if it reports an error in this way.
    -- 
    -- This should be used to indicate errors in .proto files which prevent the
    -- code generator from generating correct code.  Errors which indicate a
    -- problem in protoc itself -- such as the input CodeGeneratorRequest being
    -- unparseable -- should be reported by writing a message to stderr and
    -- exiting with a non-zero status code.
  , codeGeneratorResponseSupportedFeatures :: !(Maybe Word64)
    -- ^ A bitmask of supported features that the code generator supports.
    -- This is a bitwise "or" of values from the Feature enum.
  , codeGeneratorResponseMinimumEdition :: !(Maybe Int32)
    -- ^ The minimum edition this plugin supports.  This will be treated as an
    -- Edition enum, but we want to allow unknown values.  It should be specified
    -- according the edition enum value, *not* the edition number.  Only takes
    -- effect for plugins that have FEATURE_SUPPORTS_EDITIONS set.
  , codeGeneratorResponseMaximumEdition :: !(Maybe Int32)
    -- ^ The maximum edition this plugin supports.  This will be treated as an
    -- Edition enum, but we want to allow unknown values.  It should be specified
    -- according the edition enum value, *not* the edition number.  Only takes
    -- effect for plugins that have FEATURE_SUPPORTS_EDITIONS set.
  , codeGeneratorResponseFile :: !(V.Vector CodeGeneratorResponse'File)
  , codeGeneratorResponseUnknownFields :: ![UnknownField]
  }
  deriving stock (Show, Eq, Generic)
  deriving anyclass NFData

-- | Sync with code_generator.h.
data CodeGeneratorResponse'Feature
  = CodeGeneratorResponse'Feature'FeatureNone
  | CodeGeneratorResponse'Feature'FeatureProto3Optional
  | CodeGeneratorResponse'Feature'FeatureSupportsEditions
  deriving stock (Show, Eq, Ord, Prelude.Enum, Prelude.Bounded, Generic)
  deriving anyclass NFData

toProtoEnumCodeGeneratorResponse'Feature :: CodeGeneratorResponse'Feature -> Int
toProtoEnumCodeGeneratorResponse'Feature CodeGeneratorResponse'Feature'FeatureNone = 0
toProtoEnumCodeGeneratorResponse'Feature CodeGeneratorResponse'Feature'FeatureProto3Optional = 1
toProtoEnumCodeGeneratorResponse'Feature CodeGeneratorResponse'Feature'FeatureSupportsEditions = 2

fromProtoEnumCodeGeneratorResponse'Feature :: Int -> Maybe CodeGeneratorResponse'Feature
fromProtoEnumCodeGeneratorResponse'Feature 0 = Just CodeGeneratorResponse'Feature'FeatureNone
fromProtoEnumCodeGeneratorResponse'Feature 1 = Just CodeGeneratorResponse'Feature'FeatureProto3Optional
fromProtoEnumCodeGeneratorResponse'Feature 2 = Just CodeGeneratorResponse'Feature'FeatureSupportsEditions
fromProtoEnumCodeGeneratorResponse'Feature _ = Nothing

instance MessageEncode CodeGeneratorResponse'Feature where
  buildSized _ = mempty
instance MessageDecode CodeGeneratorResponse'Feature where
  messageDecoder = pure (Prelude.toEnum 0)

instance Aeson.ToJSON CodeGeneratorResponse'Feature where
  toJSON CodeGeneratorResponse'Feature'FeatureNone = Aeson.String "FEATURE_NONE"
  toJSON CodeGeneratorResponse'Feature'FeatureProto3Optional = Aeson.String "FEATURE_PROTO3_OPTIONAL"
  toJSON CodeGeneratorResponse'Feature'FeatureSupportsEditions = Aeson.String "FEATURE_SUPPORTS_EDITIONS"

instance Aeson.FromJSON CodeGeneratorResponse'Feature where
  parseJSON = \case
    Aeson.String "FEATURE_NONE" -> pure CodeGeneratorResponse'Feature'FeatureNone
    Aeson.String "FEATURE_PROTO3_OPTIONAL" -> pure CodeGeneratorResponse'Feature'FeatureProto3Optional
    Aeson.String "FEATURE_SUPPORTS_EDITIONS" -> pure CodeGeneratorResponse'Feature'FeatureSupportsEditions
    Aeson.Number n -> pure (Prelude.toEnum (round n))
    _ -> fail "Invalid enum value for CodeGeneratorResponse'Feature"

instance Hashable CodeGeneratorResponse'Feature where
  hashWithSalt salt x = hashWithSalt salt (toProtoEnumCodeGeneratorResponse'Feature x)

-- | Represents a single generated file.
data CodeGeneratorResponse'File = CodeGeneratorResponse'File
  { codeGeneratorResponseFileName :: !(Maybe Text)
    -- ^ The file name, relative to the output directory.  The name must not
    -- contain "." or ".." components and must be relative, not be absolute (so,
    -- the file cannot lie outside the output directory).  "/" must be used as
    -- the path separator, not "\".
    -- 
    -- If the name is omitted, the content will be appended to the previous
    -- file.  This allows the generator to break large files into small chunks,
    -- and allows the generated text to be streamed back to protoc so that large
    -- files need not reside completely in memory at one time.  Note that as of
    -- this writing protoc does not optimize for this -- it will read the entire
    -- CodeGeneratorResponse before writing files to disk.
  , codeGeneratorResponseFileInsertionPoint :: !(Maybe Text)
    -- ^ If non-empty, indicates that the named file should already exist, and the
    -- content here is to be inserted into that file at a defined insertion
    -- point.  This feature allows a code generator to extend the output
    -- produced by another code generator.  The original generator may provide
    -- insertion points by placing special annotations in the file that look
    -- like:
    --   @@protoc_insertion_point(NAME)
    -- The annotation can have arbitrary text before and after it on the line,
    -- which allows it to be placed in a comment.  NAME should be replaced with
    -- an identifier naming the point -- this is what other generators will use
    -- as the insertion_point.  Code inserted at this point will be placed
    -- immediately above the line containing the insertion point (thus multiple
    -- insertions to the same point will come out in the order they were added).
    -- The double-@ is intended to make it unlikely that the generated code
    -- could contain things that look like insertion points by accident.
    -- 
    -- For example, the C++ code generator places the following line in the
    -- .pb.h files that it generates:
    --   // @@protoc_insertion_point(namespace_scope)
    -- This line appears within the scope of the file's package namespace, but
    -- outside of any particular class.  Another plugin can then specify the
    -- insertion_point "namespace_scope" to generate additional classes or
    -- other declarations that should be placed in this scope.
    -- 
    -- Note that if the line containing the insertion point begins with
    -- whitespace, the same whitespace will be added to every line of the
    -- inserted text.  This is useful for languages like Python, where
    -- indentation matters.  In these languages, the insertion point comment
    -- should be indented the same amount as any inserted code will need to be
    -- in order to work correctly in that context.
    -- 
    -- The code generator that generates the initial file and the one which
    -- inserts into it must both run as part of a single invocation of protoc.
    -- Code generators are executed in the order in which they appear on the
    -- command line.
    -- 
    -- If |insertion_point| is present, |name| must also be present.
  , codeGeneratorResponseFileContent :: !(Maybe Text)
    -- ^ The file contents.
  , codeGeneratorResponseFileGeneratedCodeInfo :: !(Maybe PB_Reflection_Descriptor.GeneratedCodeInfo)
    -- ^ Information describing the file content being inserted. If an insertion
    -- point is used, this information will be appropriately offset and inserted
    -- into the code generation metadata for the generated files.
  , codeGeneratorResponseFileUnknownFields :: ![UnknownField]
  }
  deriving stock (Show, Eq, Generic)
  deriving anyclass NFData

defaultCodeGeneratorResponse'File :: CodeGeneratorResponse'File
defaultCodeGeneratorResponse'File = CodeGeneratorResponse'File
  { codeGeneratorResponseFileName = Nothing
  , codeGeneratorResponseFileInsertionPoint = Nothing
  , codeGeneratorResponseFileContent = Nothing
  , codeGeneratorResponseFileGeneratedCodeInfo = Nothing
  , codeGeneratorResponseFileUnknownFields = []
  }

instance MessageEncode CodeGeneratorResponse'File where
  buildSized msg =
    (maybe mempty (\v -> archString 10 v) msg.codeGeneratorResponseFileName)
    <> (maybe mempty (\v -> archString 18 v) msg.codeGeneratorResponseFileInsertionPoint)
    <> (maybe mempty (\v -> archString 122 v) msg.codeGeneratorResponseFileContent)
    <> (maybe mempty (\v -> archSubmessage 130 (buildSized v)) msg.codeGeneratorResponseFileGeneratedCodeInfo)
    <> encodeUnknownFieldsSized msg.codeGeneratorResponseFileUnknownFields

instance MessageDecode CodeGeneratorResponse'File where
  {-# INLINE messageDecoder #-}
  messageDecoder = stage_0 defaultCodeGeneratorResponse'File
    where
      stage_0 msg =
        inOrderStage1
          (0xa :: Data.Word.Word8)
          decodeFieldString
          (\v -> stage_1 (msg { codeGeneratorResponseFileName = (Just v)}))
          (pure (case msg.codeGeneratorResponseFileUnknownFields of { [] -> msg; _ -> msg { codeGeneratorResponseFileUnknownFields = reverse (msg.codeGeneratorResponseFileUnknownFields) } }))
          (loop msg)
      stage_1 msg =
        inOrderStage1
          (0x12 :: Data.Word.Word8)
          decodeFieldString
          (\v -> stage_2 (msg { codeGeneratorResponseFileInsertionPoint = (Just v)}))
          (pure (case msg.codeGeneratorResponseFileUnknownFields of { [] -> msg; _ -> msg { codeGeneratorResponseFileUnknownFields = reverse (msg.codeGeneratorResponseFileUnknownFields) } }))
          (loop msg)
      stage_2 msg =
        inOrderStage1
          (0x7a :: Data.Word.Word8)
          decodeFieldString
          (\v -> stage_3 (msg { codeGeneratorResponseFileContent = (Just v)}))
          (pure (case msg.codeGeneratorResponseFileUnknownFields of { [] -> msg; _ -> msg { codeGeneratorResponseFileUnknownFields = reverse (msg.codeGeneratorResponseFileUnknownFields) } }))
          (loop msg)
      stage_3 msg =
        inOrderStage
          0x182
          0xffff
          2
          decodeFieldMessage
          (\v -> loop (msg { codeGeneratorResponseFileGeneratedCodeInfo = (Just v)}))
          (pure (case msg.codeGeneratorResponseFileUnknownFields of { [] -> msg; _ -> msg { codeGeneratorResponseFileUnknownFields = reverse (msg.codeGeneratorResponseFileUnknownFields) } }))
          (loop msg)
      loop msg = withTagM
        (pure (case msg.codeGeneratorResponseFileUnknownFields of { [] -> msg; _ -> msg { codeGeneratorResponseFileUnknownFields = reverse (msg.codeGeneratorResponseFileUnknownFields) } }))
        (\fn wt -> case fn of
          1 -> do
            v <- decodeFieldString
            loop (msg { codeGeneratorResponseFileName = (Just v)})
          2 -> do
            v <- decodeFieldString
            loop (msg { codeGeneratorResponseFileInsertionPoint = (Just v)})
          15 -> do
            v <- decodeFieldString
            loop (msg { codeGeneratorResponseFileContent = (Just v)})
          16 -> do
            v <- decodeFieldMessage
            loop (msg { codeGeneratorResponseFileGeneratedCodeInfo = (Just v)})
          _ -> do
            uf <- captureUnknownField fn (Prelude.toEnum wt)
            loop (msg { codeGeneratorResponseFileUnknownFields = (uf : msg.codeGeneratorResponseFileUnknownFields)}))

-- | Field descriptors for 'CodeGeneratorResponse'File', keyed by proto field number.
--
-- Top-level CAF: allocated lazily on first force, shared on every
-- subsequent 'protoFieldDescriptors' call (no per-call rebuild).
codeGeneratorResponse'FileFieldDescriptors :: IntMap.IntMap (SomeFieldDescriptor CodeGeneratorResponse'File)
codeGeneratorResponse'FileFieldDescriptors =
  IntMap.fromList
    [ (1, SomeField FieldDescriptor
        { fdName = "name"
        , fdNumber = 1
        , fdTypeDesc = ScalarType StringField
        , fdLabel = LabelOptional
        , fdGet = codeGeneratorResponseFileName
        , fdSet = \v m -> m { codeGeneratorResponseFileName = v }
        }), (2, SomeField FieldDescriptor
        { fdName = "insertion_point"
        , fdNumber = 2
        , fdTypeDesc = ScalarType StringField
        , fdLabel = LabelOptional
        , fdGet = codeGeneratorResponseFileInsertionPoint
        , fdSet = \v m -> m { codeGeneratorResponseFileInsertionPoint = v }
        })
    , (15, SomeField FieldDescriptor
        { fdName = "content"
        , fdNumber = 15
        , fdTypeDesc = ScalarType StringField
        , fdLabel = LabelOptional
        , fdGet = codeGeneratorResponseFileContent
        , fdSet = \v m -> m { codeGeneratorResponseFileContent = v }
        })
    , (16, SomeField FieldDescriptor
        { fdName = "generated_code_info"
        , fdNumber = 16
        , fdTypeDesc = MessageType "GeneratedCodeInfo"
        , fdLabel = LabelOptional
        , fdGet = codeGeneratorResponseFileGeneratedCodeInfo
        , fdSet = \v m -> m { codeGeneratorResponseFileGeneratedCodeInfo = v }
        })
    ]

instance ProtoMessage CodeGeneratorResponse'File where
  protoMessageName _ = "google.protobuf.compiler.CodeGeneratorResponse.File"
  protoPackageName _ = "google.protobuf.compiler"
  protoDefaultValue = defaultCodeGeneratorResponse'File
  protoFileDescriptorBytes _ = fileDescriptorProtoBytes
  protoFieldDescriptors _ = codeGeneratorResponse'FileFieldDescriptors

instance IsMessage CodeGeneratorResponse'File

instance Aeson.ToJSON CodeGeneratorResponse'File where
  toJSON msg = jsonObject
      [ "name" .=: msg.codeGeneratorResponseFileName
      , "insertionPoint" .=: msg.codeGeneratorResponseFileInsertionPoint
      , "content" .=: msg.codeGeneratorResponseFileContent
      , "generatedCodeInfo" .=: msg.codeGeneratorResponseFileGeneratedCodeInfo
      ]

instance Aeson.FromJSON CodeGeneratorResponse'File where
  parseJSON = Aeson.withObject "CodeGeneratorResponse'File" $ \obj -> do
    fld_codeGeneratorResponseFileName <- parseFieldMaybe obj "name"
    fld_codeGeneratorResponseFileInsertionPoint <- parseFieldMaybe obj "insertionPoint"
    fld_codeGeneratorResponseFileContent <- parseFieldMaybe obj "content"
    fld_codeGeneratorResponseFileGeneratedCodeInfo <- parseFieldMaybe obj "generatedCodeInfo"
    pure defaultCodeGeneratorResponse'File
      { codeGeneratorResponseFileName = maybe (codeGeneratorResponseFileName defaultCodeGeneratorResponse'File) id fld_codeGeneratorResponseFileName
      , codeGeneratorResponseFileInsertionPoint = maybe (codeGeneratorResponseFileInsertionPoint defaultCodeGeneratorResponse'File) id fld_codeGeneratorResponseFileInsertionPoint
      , codeGeneratorResponseFileContent = maybe (codeGeneratorResponseFileContent defaultCodeGeneratorResponse'File) id fld_codeGeneratorResponseFileContent
      , codeGeneratorResponseFileGeneratedCodeInfo = maybe (codeGeneratorResponseFileGeneratedCodeInfo defaultCodeGeneratorResponse'File) id fld_codeGeneratorResponseFileGeneratedCodeInfo
      }

instance Hashable CodeGeneratorResponse'File where
  hashWithSalt salt msg = hashWithSalt (hashWithSalt (hashWithSalt (hashWithSalt (salt) msg.codeGeneratorResponseFileName) msg.codeGeneratorResponseFileInsertionPoint) msg.codeGeneratorResponseFileContent) msg.codeGeneratorResponseFileGeneratedCodeInfo

instance Proto.Extension.HasExtensions CodeGeneratorResponse'File where
  messageUnknownFields = codeGeneratorResponseFileUnknownFields
  setMessageUnknownFields !ufs msg = msg { codeGeneratorResponseFileUnknownFields = ufs }

instance Semigroup CodeGeneratorResponse'File where
  a <> b = CodeGeneratorResponse'File
    { codeGeneratorResponseFileName = case b.codeGeneratorResponseFileName of { Nothing -> a.codeGeneratorResponseFileName; x -> x }
    , codeGeneratorResponseFileInsertionPoint = case b.codeGeneratorResponseFileInsertionPoint of { Nothing -> a.codeGeneratorResponseFileInsertionPoint; x -> x }
    , codeGeneratorResponseFileContent = case b.codeGeneratorResponseFileContent of { Nothing -> a.codeGeneratorResponseFileContent; x -> x }
    , codeGeneratorResponseFileGeneratedCodeInfo = case b.codeGeneratorResponseFileGeneratedCodeInfo of { Nothing -> a.codeGeneratorResponseFileGeneratedCodeInfo; x -> x }
    , codeGeneratorResponseFileUnknownFields = a.codeGeneratorResponseFileUnknownFields <> b.codeGeneratorResponseFileUnknownFields
    }

instance Monoid CodeGeneratorResponse'File where
  mempty = defaultCodeGeneratorResponse'File

defaultCodeGeneratorResponse :: CodeGeneratorResponse
defaultCodeGeneratorResponse = CodeGeneratorResponse
  { codeGeneratorResponseError = Nothing
  , codeGeneratorResponseSupportedFeatures = Nothing
  , codeGeneratorResponseMinimumEdition = Nothing
  , codeGeneratorResponseMaximumEdition = Nothing
  , codeGeneratorResponseFile = V.empty
  , codeGeneratorResponseUnknownFields = []
  }

instance MessageEncode CodeGeneratorResponse where
  buildSized msg =
    (maybe mempty (\v -> archString 10 v) msg.codeGeneratorResponseError)
    <> (maybe mempty (\v -> archVarint 16 v) msg.codeGeneratorResponseSupportedFeatures)
    <> (maybe mempty (\v -> archVarint 24 (fromIntegral v)) msg.codeGeneratorResponseMinimumEdition)
    <> (maybe mempty (\v -> archVarint 32 (fromIntegral v)) msg.codeGeneratorResponseMaximumEdition)
    <> V.foldl' (\acc v -> acc <> archSubmessage 122 (buildSized v)) mempty msg.codeGeneratorResponseFile
    <> encodeUnknownFieldsSized msg.codeGeneratorResponseUnknownFields

instance MessageDecode CodeGeneratorResponse where
  {-# INLINE messageDecoder #-}
  messageDecoder = stage_0 defaultCodeGeneratorResponse emptyGrowList
    where
      stage_0 msg gl_0 =
        inOrderStage1
          (0xa :: Data.Word.Word8)
          decodeFieldString
          (\v -> stage_1 (msg { codeGeneratorResponseError = (Just v)}) gl_0)
          (pure (case msg.codeGeneratorResponseUnknownFields of { [] -> msg { codeGeneratorResponseFile = growListToVector gl_0 }; _ -> msg { codeGeneratorResponseFile = growListToVector gl_0, codeGeneratorResponseUnknownFields = reverse (msg.codeGeneratorResponseUnknownFields) } }))
          (loop msg gl_0)
      stage_1 msg gl_0 =
        inOrderStage1
          (0x10 :: Data.Word.Word8)
          decodeFieldVarint
          (\v -> stage_2 (msg { codeGeneratorResponseSupportedFeatures = (Just v)}) gl_0)
          (pure (case msg.codeGeneratorResponseUnknownFields of { [] -> msg { codeGeneratorResponseFile = growListToVector gl_0 }; _ -> msg { codeGeneratorResponseFile = growListToVector gl_0, codeGeneratorResponseUnknownFields = reverse (msg.codeGeneratorResponseUnknownFields) } }))
          (loop msg gl_0)
      stage_2 msg gl_0 =
        inOrderStage1
          (0x18 :: Data.Word.Word8)
          (fromIntegral <$> decodeFieldVarint)
          (\v -> stage_3 (msg { codeGeneratorResponseMinimumEdition = (Just v)}) gl_0)
          (pure (case msg.codeGeneratorResponseUnknownFields of { [] -> msg { codeGeneratorResponseFile = growListToVector gl_0 }; _ -> msg { codeGeneratorResponseFile = growListToVector gl_0, codeGeneratorResponseUnknownFields = reverse (msg.codeGeneratorResponseUnknownFields) } }))
          (loop msg gl_0)
      stage_3 msg gl_0 =
        inOrderStage1
          (0x20 :: Data.Word.Word8)
          (fromIntegral <$> decodeFieldVarint)
          (\v -> stage_4 (msg { codeGeneratorResponseMaximumEdition = (Just v)}) gl_0)
          (pure (case msg.codeGeneratorResponseUnknownFields of { [] -> msg { codeGeneratorResponseFile = growListToVector gl_0 }; _ -> msg { codeGeneratorResponseFile = growListToVector gl_0, codeGeneratorResponseUnknownFields = reverse (msg.codeGeneratorResponseUnknownFields) } }))
          (loop msg gl_0)
      stage_4 msg gl_0 =
        inOrderStage1
          (0x7a :: Data.Word.Word8)
          decodeFieldMessage
          (\v -> stage_4 msg (snocGrowList gl_0 v))
          (pure (case msg.codeGeneratorResponseUnknownFields of { [] -> msg { codeGeneratorResponseFile = growListToVector gl_0 }; _ -> msg { codeGeneratorResponseFile = growListToVector gl_0, codeGeneratorResponseUnknownFields = reverse (msg.codeGeneratorResponseUnknownFields) } }))
          (loop msg gl_0)
      loop msg gl_0 = withTagM
        (pure (case msg.codeGeneratorResponseUnknownFields of { [] -> msg { codeGeneratorResponseFile = growListToVector gl_0 }; _ -> msg { codeGeneratorResponseFile = growListToVector gl_0, codeGeneratorResponseUnknownFields = reverse (msg.codeGeneratorResponseUnknownFields) } }))
        (\fn wt -> case fn of
          1 -> do
            v <- decodeFieldString
            loop (msg { codeGeneratorResponseError = (Just v)}) gl_0
          2 -> do
            v <- decodeFieldVarint
            loop (msg { codeGeneratorResponseSupportedFeatures = (Just v)}) gl_0
          3 -> do
            v <- (fromIntegral <$> decodeFieldVarint)
            loop (msg { codeGeneratorResponseMinimumEdition = (Just v)}) gl_0
          4 -> do
            v <- (fromIntegral <$> decodeFieldVarint)
            loop (msg { codeGeneratorResponseMaximumEdition = (Just v)}) gl_0
          15 -> do
            v <- decodeFieldMessage
            loop msg (snocGrowList gl_0 v)
          _ -> do
            uf <- captureUnknownField fn (Prelude.toEnum wt)
            loop (msg { codeGeneratorResponseUnknownFields = (uf : msg.codeGeneratorResponseUnknownFields)}) gl_0)

-- | Field descriptors for 'CodeGeneratorResponse', keyed by proto field number.
--
-- Top-level CAF: allocated lazily on first force, shared on every
-- subsequent 'protoFieldDescriptors' call (no per-call rebuild).
codeGeneratorResponseFieldDescriptors :: IntMap.IntMap (SomeFieldDescriptor CodeGeneratorResponse)
codeGeneratorResponseFieldDescriptors =
  IntMap.fromList
    [ (1, SomeField FieldDescriptor
        { fdName = "error"
        , fdNumber = 1
        , fdTypeDesc = ScalarType StringField
        , fdLabel = LabelOptional
        , fdGet = codeGeneratorResponseError
        , fdSet = \v m -> m { codeGeneratorResponseError = v }
        }), (2, SomeField FieldDescriptor
        { fdName = "supported_features"
        , fdNumber = 2
        , fdTypeDesc = ScalarType UInt64Field
        , fdLabel = LabelOptional
        , fdGet = codeGeneratorResponseSupportedFeatures
        , fdSet = \v m -> m { codeGeneratorResponseSupportedFeatures = v }
        })
    , (3, SomeField FieldDescriptor
        { fdName = "minimum_edition"
        , fdNumber = 3
        , fdTypeDesc = ScalarType Int32Field
        , fdLabel = LabelOptional
        , fdGet = codeGeneratorResponseMinimumEdition
        , fdSet = \v m -> m { codeGeneratorResponseMinimumEdition = v }
        })
    , (4, SomeField FieldDescriptor
        { fdName = "maximum_edition"
        , fdNumber = 4
        , fdTypeDesc = ScalarType Int32Field
        , fdLabel = LabelOptional
        , fdGet = codeGeneratorResponseMaximumEdition
        , fdSet = \v m -> m { codeGeneratorResponseMaximumEdition = v }
        })
    , (15, SomeField FieldDescriptor
        { fdName = "file"
        , fdNumber = 15
        , fdTypeDesc = MessageType "File"
        , fdLabel = LabelRepeated
        , fdGet = codeGeneratorResponseFile
        , fdSet = \v m -> m { codeGeneratorResponseFile = v }
        })
    ]

instance ProtoMessage CodeGeneratorResponse where
  protoMessageName _ = "google.protobuf.compiler.CodeGeneratorResponse"
  protoPackageName _ = "google.protobuf.compiler"
  protoDefaultValue = defaultCodeGeneratorResponse
  protoFileDescriptorBytes _ = fileDescriptorProtoBytes
  protoFieldDescriptors _ = codeGeneratorResponseFieldDescriptors

instance IsMessage CodeGeneratorResponse

instance Aeson.ToJSON CodeGeneratorResponse where
  toJSON msg = jsonObject
      [ "error" .=: msg.codeGeneratorResponseError
      , "supportedFeatures" .=: msg.codeGeneratorResponseSupportedFeatures
      , "minimumEdition" .=: msg.codeGeneratorResponseMinimumEdition
      , "maximumEdition" .=: msg.codeGeneratorResponseMaximumEdition
      , "file" .=: msg.codeGeneratorResponseFile
      ]

instance Aeson.FromJSON CodeGeneratorResponse where
  parseJSON = Aeson.withObject "CodeGeneratorResponse" $ \obj -> do
    fld_codeGeneratorResponseError <- parseFieldMaybe obj "error"
    fld_codeGeneratorResponseSupportedFeatures <- parseFieldMaybe obj "supportedFeatures"
    fld_codeGeneratorResponseMinimumEdition <- parseFieldMaybe obj "minimumEdition"
    fld_codeGeneratorResponseMaximumEdition <- parseFieldMaybe obj "maximumEdition"
    fld_codeGeneratorResponseFile <- parseFieldMaybe obj "file"
    pure defaultCodeGeneratorResponse
      { codeGeneratorResponseError = maybe (codeGeneratorResponseError defaultCodeGeneratorResponse) id fld_codeGeneratorResponseError
      , codeGeneratorResponseSupportedFeatures = maybe (codeGeneratorResponseSupportedFeatures defaultCodeGeneratorResponse) id fld_codeGeneratorResponseSupportedFeatures
      , codeGeneratorResponseMinimumEdition = maybe (codeGeneratorResponseMinimumEdition defaultCodeGeneratorResponse) id fld_codeGeneratorResponseMinimumEdition
      , codeGeneratorResponseMaximumEdition = maybe (codeGeneratorResponseMaximumEdition defaultCodeGeneratorResponse) id fld_codeGeneratorResponseMaximumEdition
      , codeGeneratorResponseFile = maybe (codeGeneratorResponseFile defaultCodeGeneratorResponse) id fld_codeGeneratorResponseFile
      }

instance Hashable CodeGeneratorResponse where
  hashWithSalt salt msg = V.foldl' hashWithSalt (hashWithSalt (hashWithSalt (hashWithSalt (hashWithSalt (salt) msg.codeGeneratorResponseError) msg.codeGeneratorResponseSupportedFeatures) msg.codeGeneratorResponseMinimumEdition) msg.codeGeneratorResponseMaximumEdition) msg.codeGeneratorResponseFile

instance Proto.Extension.HasExtensions CodeGeneratorResponse where
  messageUnknownFields = codeGeneratorResponseUnknownFields
  setMessageUnknownFields !ufs msg = msg { codeGeneratorResponseUnknownFields = ufs }

instance Semigroup CodeGeneratorResponse where
  a <> b = CodeGeneratorResponse
    { codeGeneratorResponseError = case b.codeGeneratorResponseError of { Nothing -> a.codeGeneratorResponseError; x -> x }
    , codeGeneratorResponseSupportedFeatures = case b.codeGeneratorResponseSupportedFeatures of { Nothing -> a.codeGeneratorResponseSupportedFeatures; x -> x }
    , codeGeneratorResponseMinimumEdition = case b.codeGeneratorResponseMinimumEdition of { Nothing -> a.codeGeneratorResponseMinimumEdition; x -> x }
    , codeGeneratorResponseMaximumEdition = case b.codeGeneratorResponseMaximumEdition of { Nothing -> a.codeGeneratorResponseMaximumEdition; x -> x }
    , codeGeneratorResponseFile = a.codeGeneratorResponseFile <> b.codeGeneratorResponseFile
    , codeGeneratorResponseUnknownFields = a.codeGeneratorResponseUnknownFields <> b.codeGeneratorResponseUnknownFields
    }

instance Monoid CodeGeneratorResponse where
  mempty = defaultCodeGeneratorResponse