module Dhall.Kubernetes.Data where

import Dhall.Kubernetes.Types

import qualified Data.Map.Strict as Data.Map
import qualified Data.Set        as Set


-- | This just removes the offending keys from the definition
patchCyclicImports :: Definition -> Definition
patchCyclicImports :: Definition -> Definition
patchCyclicImports Definition{ $sel:properties:Definition :: Definition -> Maybe (Map ModelName Definition)
properties = Maybe (Map ModelName Definition)
oldProps, Maybe Bool
Maybe Scientific
Maybe Text
Maybe (Set FieldName)
Maybe BaseData
Maybe Ref
Maybe Definition
$sel:intOrString:Definition :: Definition -> Maybe Bool
$sel:baseData:Definition :: Definition -> Maybe BaseData
$sel:required:Definition :: Definition -> Maybe (Set FieldName)
$sel:items:Definition :: Definition -> Maybe Definition
$sel:description:Definition :: Definition -> Maybe Text
$sel:exclusiveMinimum:Definition :: Definition -> Maybe Bool
$sel:minimum_:Definition :: Definition -> Maybe Scientific
$sel:format:Definition :: Definition -> Maybe Text
$sel:ref:Definition :: Definition -> Maybe Ref
$sel:typ:Definition :: Definition -> Maybe Text
intOrString :: Maybe Bool
baseData :: Maybe BaseData
required :: Maybe (Set FieldName)
items :: Maybe Definition
description :: Maybe Text
exclusiveMinimum :: Maybe Bool
minimum_ :: Maybe Scientific
format :: Maybe Text
ref :: Maybe Ref
typ :: Maybe Text
.. } = Definition :: Maybe Text
-> Maybe Ref
-> Maybe Text
-> Maybe Scientific
-> Maybe Bool
-> Maybe Text
-> Maybe Definition
-> Maybe (Map ModelName Definition)
-> Maybe (Set FieldName)
-> Maybe BaseData
-> Maybe Bool
-> Definition
Definition{Maybe Bool
Maybe Scientific
Maybe Text
Maybe (Map ModelName Definition)
Maybe (Set FieldName)
Maybe BaseData
Maybe Ref
Maybe Definition
properties :: Maybe (Map ModelName Definition)
$sel:intOrString:Definition :: Maybe Bool
$sel:baseData:Definition :: Maybe BaseData
$sel:required:Definition :: Maybe (Set FieldName)
$sel:items:Definition :: Maybe Definition
$sel:description:Definition :: Maybe Text
$sel:exclusiveMinimum:Definition :: Maybe Bool
$sel:minimum_:Definition :: Maybe Scientific
$sel:format:Definition :: Maybe Text
$sel:ref:Definition :: Maybe Ref
$sel:typ:Definition :: Maybe Text
intOrString :: Maybe Bool
baseData :: Maybe BaseData
required :: Maybe (Set FieldName)
items :: Maybe Definition
description :: Maybe Text
exclusiveMinimum :: Maybe Bool
minimum_ :: Maybe Scientific
format :: Maybe Text
ref :: Maybe Ref
typ :: Maybe Text
$sel:properties:Definition :: Maybe (Map ModelName Definition)
..}
  where
    properties :: Maybe (Map ModelName Definition)
properties = (Map ModelName Definition -> Map ModelName Definition)
-> Maybe (Map ModelName Definition)
-> Maybe (Map ModelName Definition)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Map ModelName Definition
propsMap -> Map ModelName Definition
-> Set ModelName -> Map ModelName Definition
forall k a. Ord k => Map k a -> Set k -> Map k a
Data.Map.withoutKeys Map ModelName Definition
propsMap Set ModelName
toRemove) Maybe (Map ModelName Definition)
oldProps
    toRemove :: Set ModelName
toRemove =
      [ModelName] -> Set ModelName
forall a. Ord a => [a] -> Set a
Set.fromList ([ModelName] -> Set ModelName) -> [ModelName] -> Set ModelName
forall a b. (a -> b) -> a -> b
$
        (   Text -> ModelName
ModelName
        (Text -> ModelName) -> [Text] -> [ModelName]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [ Text
"allOf"
            , Text
"anyOf"
            , Text
"not"
            , Text
"oneOf"
            , Text
"additionalItems"
            , Text
"additionalProperties"
            , Text
"items"
            ]
        )