domaindriven-0.5.0: src/DomainDriven/Internal/NamedFields.hs
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE OverloadedLists #-}
module DomainDriven.Internal.NamedFields
( NF1 (..)
, NF2 (..)
, NF3 (..)
, NF4 (..)
, NF5 (..)
, NF6 (..)
, NF7 (..)
, NF8 (..)
, NF9 (..)
)
where
import Data.Aeson
import qualified Data.Aeson.Key as Key
import qualified Data.Aeson.KeyMap as KM
import Data.OpenApi
import Data.Proxy
import qualified Data.Text as T
import GHC.Generics (Generic)
import GHC.TypeLits
import Prelude
data NF1 (name :: Symbol) (f1 :: Symbol) ty = NF1 ty
deriving (Show, Generic)
data NF2 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 = NF2 a1 a2
deriving (Show, Generic)
data NF3 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 = NF3 a1 a2 a3
deriving (Show, Generic)
data NF4 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 = NF4 a1 a2 a3 a4
deriving (Show, Generic)
data NF5 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 = NF5 a1 a2 a3 a4 a5
deriving (Show, Generic)
data NF6 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 = NF6 a1 a2 a3 a4 a5 a6
deriving (Show, Generic)
data NF7 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 = NF7 a1 a2 a3 a4 a5 a6 a7
deriving (Show, Generic)
data NF8 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 (f8 :: Symbol) a8 = NF8 a1 a2 a3 a4 a5 a6 a7 a8
deriving (Show, Generic)
data NF9 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 (f8 :: Symbol) a8 (f9 :: Symbol) a9 = NF9 a1 a2 a3 a4 a5 a6 a7 a8 a9
deriving (Show, Generic)
symbolKey :: forall n. KnownSymbol n => Key
symbolKey = Key.fromString . symbolVal $ Proxy @n
instance (KnownSymbol f1, ToJSON a1) => ToJSON (NF1 name f1 a1) where
toJSON (NF1 a1) =
Object $
KM.fromList
[ (symbolKey @f1, toJSON a1)
]
instance
( KnownSymbol f1
, ToJSON a1
, KnownSymbol f2
, ToJSON a2
)
=> ToJSON (NF2 name f1 a1 f2 a2)
where
toJSON (NF2 a1 a2) =
Object $
KM.fromList
[ (symbolKey @f1, toJSON a1)
, (symbolKey @f2, toJSON a2)
]
instance
( KnownSymbol f1
, ToJSON a1
, KnownSymbol f2
, ToJSON a2
, KnownSymbol f3
, ToJSON a3
)
=> ToJSON (NF3 name f1 a1 f2 a2 f3 a3)
where
toJSON (NF3 a1 a2 a3) =
Object $
KM.fromList
[ (symbolKey @f1, toJSON a1)
, (symbolKey @f2, toJSON a2)
, (symbolKey @f3, toJSON a3)
]
instance
( KnownSymbol f1
, ToJSON a1
, KnownSymbol f2
, ToJSON a2
, KnownSymbol f3
, ToJSON a3
, KnownSymbol f4
, ToJSON a4
)
=> ToJSON (NF4 name f1 a1 f2 a2 f3 a3 f4 a4)
where
toJSON (NF4 a1 a2 a3 a4) =
Object $
KM.fromList
[ (symbolKey @f1, toJSON a1)
, (symbolKey @f2, toJSON a2)
, (symbolKey @f3, toJSON a3)
, (symbolKey @f4, toJSON a4)
]
instance
( KnownSymbol f1
, ToJSON a1
, KnownSymbol f2
, ToJSON a2
, KnownSymbol f3
, ToJSON a3
, KnownSymbol f4
, ToJSON a4
, KnownSymbol f5
, ToJSON a5
)
=> ToJSON (NF5 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5)
where
toJSON (NF5 a1 a2 a3 a4 a5) =
Object $
KM.fromList
[ (symbolKey @f1, toJSON a1)
, (symbolKey @f2, toJSON a2)
, (symbolKey @f3, toJSON a3)
, (symbolKey @f4, toJSON a4)
, (symbolKey @f5, toJSON a5)
]
instance
( KnownSymbol f1
, ToJSON a1
, KnownSymbol f2
, ToJSON a2
, KnownSymbol f3
, ToJSON a3
, KnownSymbol f4
, ToJSON a4
, KnownSymbol f5
, ToJSON a5
, KnownSymbol f6
, ToJSON a6
)
=> ToJSON (NF6 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6)
where
toJSON (NF6 a1 a2 a3 a4 a5 a6) =
Object $
KM.fromList
[ (symbolKey @f1, toJSON a1)
, (symbolKey @f2, toJSON a2)
, (symbolKey @f3, toJSON a3)
, (symbolKey @f4, toJSON a4)
, (symbolKey @f5, toJSON a5)
, (symbolKey @f6, toJSON a6)
]
instance
( KnownSymbol f1
, ToJSON a1
, KnownSymbol f2
, ToJSON a2
, KnownSymbol f3
, ToJSON a3
, KnownSymbol f4
, ToJSON a4
, KnownSymbol f5
, ToJSON a5
, KnownSymbol f6
, ToJSON a6
, KnownSymbol f7
, ToJSON a7
)
=> ToJSON (NF7 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7)
where
toJSON (NF7 a1 a2 a3 a4 a5 a6 a7) =
Object $
KM.fromList
[ (symbolKey @f1, toJSON a1)
, (symbolKey @f2, toJSON a2)
, (symbolKey @f3, toJSON a3)
, (symbolKey @f4, toJSON a4)
, (symbolKey @f5, toJSON a5)
, (symbolKey @f6, toJSON a6)
, (symbolKey @f7, toJSON a7)
]
instance
( KnownSymbol f1
, ToJSON a1
, KnownSymbol f2
, ToJSON a2
, KnownSymbol f3
, ToJSON a3
, KnownSymbol f4
, ToJSON a4
, KnownSymbol f5
, ToJSON a5
, KnownSymbol f6
, ToJSON a6
, KnownSymbol f7
, ToJSON a7
, KnownSymbol f8
, ToJSON a8
)
=> ToJSON (NF8 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8)
where
toJSON (NF8 a1 a2 a3 a4 a5 a6 a7 a8) =
Object $
KM.fromList
[ (symbolKey @f1, toJSON a1)
, (symbolKey @f2, toJSON a2)
, (symbolKey @f3, toJSON a3)
, (symbolKey @f4, toJSON a4)
, (symbolKey @f5, toJSON a5)
, (symbolKey @f6, toJSON a6)
, (symbolKey @f7, toJSON a7)
, (symbolKey @f8, toJSON a8)
]
instance
( KnownSymbol f1
, ToJSON a1
, KnownSymbol f2
, ToJSON a2
, KnownSymbol f3
, ToJSON a3
, KnownSymbol f4
, ToJSON a4
, KnownSymbol f5
, ToJSON a5
, KnownSymbol f6
, ToJSON a6
, KnownSymbol f7
, ToJSON a7
, KnownSymbol f8
, ToJSON a8
, KnownSymbol f9
, ToJSON a9
)
=> ToJSON (NF9 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8 f9 a9)
where
toJSON (NF9 a1 a2 a3 a4 a5 a6 a7 a8 a9) =
Object $
KM.fromList
[ (symbolKey @f1, toJSON a1)
, (symbolKey @f2, toJSON a2)
, (symbolKey @f3, toJSON a3)
, (symbolKey @f4, toJSON a4)
, (symbolKey @f5, toJSON a5)
, (symbolKey @f6, toJSON a6)
, (symbolKey @f7, toJSON a7)
, (symbolKey @f8, toJSON a8)
, (symbolKey @f9, toJSON a9)
]
instance
(KnownSymbol name, KnownSymbol f1, FromJSON a1)
=> FromJSON (NF1 name f1 a1)
where
parseJSON = withObject (symbolVal $ Proxy @name) $ \o -> do
a1 <- o .: symbolKey @f1
pure $ NF1 a1
instance
( KnownSymbol name
, KnownSymbol f1
, FromJSON a1
, KnownSymbol f2
, FromJSON a2
)
=> FromJSON (NF2 name f1 a1 f2 a2)
where
parseJSON = withObject (symbolVal $ Proxy @name) $ \o -> do
a1 <- o .: symbolKey @f1
a2 <- o .: symbolKey @f2
pure $ NF2 a1 a2
instance
( KnownSymbol name
, KnownSymbol f1
, FromJSON a1
, KnownSymbol f2
, FromJSON a2
, KnownSymbol f3
, FromJSON a3
)
=> FromJSON (NF3 name f1 a1 f2 a2 f3 a3)
where
parseJSON = withObject (symbolVal $ Proxy @name) $ \o -> do
a1 <- o .: symbolKey @f1
a2 <- o .: symbolKey @f2
a3 <- o .: symbolKey @f3
pure $ NF3 a1 a2 a3
instance
( KnownSymbol name
, KnownSymbol f1
, FromJSON a1
, KnownSymbol f2
, FromJSON a2
, KnownSymbol f3
, FromJSON a3
, KnownSymbol f4
, FromJSON a4
)
=> FromJSON (NF4 name f1 a1 f2 a2 f3 a3 f4 a4)
where
parseJSON = withObject (symbolVal $ Proxy @name) $ \o -> do
a1 <- o .: symbolKey @f1
a2 <- o .: symbolKey @f2
a3 <- o .: symbolKey @f3
a4 <- o .: symbolKey @f4
pure $ NF4 a1 a2 a3 a4
instance
( KnownSymbol name
, KnownSymbol f1
, FromJSON a1
, KnownSymbol f2
, FromJSON a2
, KnownSymbol f3
, FromJSON a3
, KnownSymbol f4
, FromJSON a4
, KnownSymbol f5
, FromJSON a5
)
=> FromJSON (NF5 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5)
where
parseJSON = withObject (symbolVal $ Proxy @name) $ \o -> do
a1 <- o .: symbolKey @f1
a2 <- o .: symbolKey @f2
a3 <- o .: symbolKey @f3
a4 <- o .: symbolKey @f4
a5 <- o .: symbolKey @f5
pure $ NF5 a1 a2 a3 a4 a5
instance
( KnownSymbol name
, KnownSymbol f1
, FromJSON a1
, KnownSymbol f2
, FromJSON a2
, KnownSymbol f3
, FromJSON a3
, KnownSymbol f4
, FromJSON a4
, KnownSymbol f5
, FromJSON a5
, KnownSymbol f6
, FromJSON a6
)
=> FromJSON (NF6 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6)
where
parseJSON = withObject (symbolVal $ Proxy @name) $ \o -> do
a1 <- o .: symbolKey @f1
a2 <- o .: symbolKey @f2
a3 <- o .: symbolKey @f3
a4 <- o .: symbolKey @f4
a5 <- o .: symbolKey @f5
a6 <- o .: symbolKey @f6
pure $ NF6 a1 a2 a3 a4 a5 a6
instance
( KnownSymbol name
, KnownSymbol f1
, FromJSON a1
, KnownSymbol f2
, FromJSON a2
, KnownSymbol f3
, FromJSON a3
, KnownSymbol f4
, FromJSON a4
, KnownSymbol f5
, FromJSON a5
, KnownSymbol f6
, FromJSON a6
, KnownSymbol f7
, FromJSON a7
)
=> FromJSON (NF7 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7)
where
parseJSON = withObject (symbolVal $ Proxy @name) $ \o -> do
a1 <- o .: symbolKey @f1
a2 <- o .: symbolKey @f2
a3 <- o .: symbolKey @f3
a4 <- o .: symbolKey @f4
a5 <- o .: symbolKey @f5
a6 <- o .: symbolKey @f6
a7 <- o .: symbolKey @f7
pure $ NF7 a1 a2 a3 a4 a5 a6 a7
instance
( KnownSymbol name
, KnownSymbol f1
, FromJSON a1
, KnownSymbol f2
, FromJSON a2
, KnownSymbol f3
, FromJSON a3
, KnownSymbol f4
, FromJSON a4
, KnownSymbol f5
, FromJSON a5
, KnownSymbol f6
, FromJSON a6
, KnownSymbol f7
, FromJSON a7
, KnownSymbol f8
, FromJSON a8
)
=> FromJSON (NF8 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8)
where
parseJSON = withObject (symbolVal $ Proxy @name) $ \o -> do
a1 <- o .: symbolKey @f1
a2 <- o .: symbolKey @f2
a3 <- o .: symbolKey @f3
a4 <- o .: symbolKey @f4
a5 <- o .: symbolKey @f5
a6 <- o .: symbolKey @f6
a7 <- o .: symbolKey @f7
a8 <- o .: symbolKey @f8
pure $ NF8 a1 a2 a3 a4 a5 a6 a7 a8
instance
( KnownSymbol name
, KnownSymbol f1
, FromJSON a1
, KnownSymbol f2
, FromJSON a2
, KnownSymbol f3
, FromJSON a3
, KnownSymbol f4
, FromJSON a4
, KnownSymbol f5
, FromJSON a5
, KnownSymbol f6
, FromJSON a6
, KnownSymbol f7
, FromJSON a7
, KnownSymbol f8
, FromJSON a8
, KnownSymbol f9
, FromJSON a9
)
=> FromJSON (NF9 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8 f9 a9)
where
parseJSON = withObject (symbolVal $ Proxy @name) $ \o -> do
a1 <- o .: symbolKey @f1
a2 <- o .: symbolKey @f2
a3 <- o .: symbolKey @f3
a4 <- o .: symbolKey @f4
a5 <- o .: symbolKey @f5
a6 <- o .: symbolKey @f6
a7 <- o .: symbolKey @f7
a8 <- o .: symbolKey @f8
a9 <- o .: symbolKey @f9
pure $ NF9 a1 a2 a3 a4 a5 a6 a7 a8 a9
instance
( KnownSymbol name
, KnownSymbol f1
, ToSchema a1
)
=> ToSchema (NF1 name f1 a1)
where
declareNamedSchema _ = do
f1Dec <- declareSchema $ Proxy @a1
let f1 = T.pack . symbolVal $ Proxy @f1
-- Not sure we should be inlining the schema. Let
let nfSchema :: Schema
nfSchema =
mempty
{ _schemaRequired = [f1]
, _schemaProperties = [(f1, Inline f1Dec)]
}
pure
NamedSchema
{ _namedSchemaName = Just . T.pack . symbolVal $ Proxy @name
, _namedSchemaSchema = nfSchema
}
instance
( KnownSymbol name
, KnownSymbol f1
, ToSchema a1
, KnownSymbol f2
, ToSchema a2
)
=> ToSchema (NF2 name f1 a1 f2 a2)
where
declareNamedSchema _ = do
f1Dec <- declareSchema $ Proxy @a1
f2Dec <- declareSchema $ Proxy @a2
let f1 = T.pack . symbolVal $ Proxy @f1
let f2 = T.pack . symbolVal $ Proxy @f2
-- Not sure we should be inlining the schema. Let
let nfSchema :: Schema
nfSchema =
mempty
{ _schemaRequired = [f1, f2]
, _schemaProperties =
[ (f1, Inline f1Dec)
, (f2, Inline f2Dec)
]
}
pure
NamedSchema
{ _namedSchemaName = Just . T.pack . symbolVal $ Proxy @name
, _namedSchemaSchema = nfSchema
}
instance
( KnownSymbol name
, KnownSymbol f1
, ToSchema a1
, KnownSymbol f2
, ToSchema a2
, KnownSymbol f3
, ToSchema a3
)
=> ToSchema (NF3 name f1 a1 f2 a2 f3 a3)
where
declareNamedSchema _ = do
f1Dec <- declareSchema $ Proxy @a1
f2Dec <- declareSchema $ Proxy @a2
f3Dec <- declareSchema $ Proxy @a3
let f1 = T.pack . symbolVal $ Proxy @f1
let f2 = T.pack . symbolVal $ Proxy @f2
let f3 = T.pack . symbolVal $ Proxy @f3
-- Not sure we should be inlining the schema. Let
let nfSchema :: Schema
nfSchema =
mempty
{ _schemaRequired = [f1, f2, f3]
, _schemaProperties =
[ (f1, Inline f1Dec)
, (f2, Inline f2Dec)
, (f3, Inline f3Dec)
]
}
pure
NamedSchema
{ _namedSchemaName = Just . T.pack . symbolVal $ Proxy @name
, _namedSchemaSchema = nfSchema
}
instance
( KnownSymbol name
, KnownSymbol f1
, ToSchema a1
, KnownSymbol f2
, ToSchema a2
, KnownSymbol f3
, ToSchema a3
, KnownSymbol f4
, ToSchema a4
)
=> ToSchema (NF4 name f1 a1 f2 a2 f3 a3 f4 a4)
where
declareNamedSchema _ = do
f1Dec <- declareSchema $ Proxy @a1
f2Dec <- declareSchema $ Proxy @a2
f3Dec <- declareSchema $ Proxy @a3
f4Dec <- declareSchema $ Proxy @a4
let f1 = T.pack . symbolVal $ Proxy @f1
let f2 = T.pack . symbolVal $ Proxy @f2
let f3 = T.pack . symbolVal $ Proxy @f3
let f4 = T.pack . symbolVal $ Proxy @f4
-- Not sure we should be inlining the schema. Let
let nfSchema :: Schema
nfSchema =
mempty
{ _schemaRequired = [f1, f2, f3, f4]
, _schemaProperties =
[ (f1, Inline f1Dec)
, (f2, Inline f2Dec)
, (f3, Inline f3Dec)
, (f4, Inline f4Dec)
]
}
pure
NamedSchema
{ _namedSchemaName = Just . T.pack . symbolVal $ Proxy @name
, _namedSchemaSchema = nfSchema
}
instance
( KnownSymbol name
, KnownSymbol f1
, ToSchema a1
, KnownSymbol f2
, ToSchema a2
, KnownSymbol f3
, ToSchema a3
, KnownSymbol f4
, ToSchema a4
, KnownSymbol f5
, ToSchema a5
)
=> ToSchema (NF5 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5)
where
declareNamedSchema _ = do
f1Dec <- declareSchema $ Proxy @a1
f2Dec <- declareSchema $ Proxy @a2
f3Dec <- declareSchema $ Proxy @a3
f4Dec <- declareSchema $ Proxy @a4
f5Dec <- declareSchema $ Proxy @a5
let f1 = T.pack . symbolVal $ Proxy @f1
let f2 = T.pack . symbolVal $ Proxy @f2
let f3 = T.pack . symbolVal $ Proxy @f3
let f4 = T.pack . symbolVal $ Proxy @f4
let f5 = T.pack . symbolVal $ Proxy @f5
-- Not sure we should be inlining the schema. Let
let nfSchema :: Schema
nfSchema =
mempty
{ _schemaRequired = [f1, f2, f3, f4, f5]
, _schemaProperties =
[ (f1, Inline f1Dec)
, (f2, Inline f2Dec)
, (f3, Inline f3Dec)
, (f4, Inline f4Dec)
, (f5, Inline f5Dec)
]
}
pure
NamedSchema
{ _namedSchemaName = Just . T.pack . symbolVal $ Proxy @name
, _namedSchemaSchema = nfSchema
}
instance
( KnownSymbol name
, KnownSymbol f1
, ToSchema a1
, KnownSymbol f2
, ToSchema a2
, KnownSymbol f3
, ToSchema a3
, KnownSymbol f4
, ToSchema a4
, KnownSymbol f5
, ToSchema a5
, KnownSymbol f6
, ToSchema a6
)
=> ToSchema (NF6 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6)
where
declareNamedSchema _ = do
f1Dec <- declareSchema $ Proxy @a1
f2Dec <- declareSchema $ Proxy @a2
f3Dec <- declareSchema $ Proxy @a3
f4Dec <- declareSchema $ Proxy @a4
f5Dec <- declareSchema $ Proxy @a5
f6Dec <- declareSchema $ Proxy @a6
let f1 = T.pack . symbolVal $ Proxy @f1
let f2 = T.pack . symbolVal $ Proxy @f2
let f3 = T.pack . symbolVal $ Proxy @f3
let f4 = T.pack . symbolVal $ Proxy @f4
let f5 = T.pack . symbolVal $ Proxy @f5
let f6 = T.pack . symbolVal $ Proxy @f6
-- Not sure we should be inlining the schema. Let
let nfSchema :: Schema
nfSchema =
mempty
{ _schemaRequired = [f1, f2, f3, f4, f5, f6]
, _schemaProperties =
[ (f1, Inline f1Dec)
, (f2, Inline f2Dec)
, (f3, Inline f3Dec)
, (f4, Inline f4Dec)
, (f5, Inline f5Dec)
, (f6, Inline f6Dec)
]
}
pure
NamedSchema
{ _namedSchemaName = Just . T.pack . symbolVal $ Proxy @name
, _namedSchemaSchema = nfSchema
}
instance
( KnownSymbol name
, KnownSymbol f1
, ToSchema a1
, KnownSymbol f2
, ToSchema a2
, KnownSymbol f3
, ToSchema a3
, KnownSymbol f4
, ToSchema a4
, KnownSymbol f5
, ToSchema a5
, KnownSymbol f6
, ToSchema a6
, KnownSymbol f7
, ToSchema a7
)
=> ToSchema (NF7 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7)
where
declareNamedSchema _ = do
f1Dec <- declareSchema $ Proxy @a1
f2Dec <- declareSchema $ Proxy @a2
f3Dec <- declareSchema $ Proxy @a3
f4Dec <- declareSchema $ Proxy @a4
f5Dec <- declareSchema $ Proxy @a5
f6Dec <- declareSchema $ Proxy @a6
f7Dec <- declareSchema $ Proxy @a7
let f1 = T.pack . symbolVal $ Proxy @f1
let f2 = T.pack . symbolVal $ Proxy @f2
let f3 = T.pack . symbolVal $ Proxy @f3
let f4 = T.pack . symbolVal $ Proxy @f4
let f5 = T.pack . symbolVal $ Proxy @f5
let f6 = T.pack . symbolVal $ Proxy @f6
let f7 = T.pack . symbolVal $ Proxy @f7
-- Not sure we should be inlining the schema. Let
let nfSchema :: Schema
nfSchema =
mempty
{ _schemaRequired = [f1, f2, f3, f4, f5, f6, f7]
, _schemaProperties =
[ (f1, Inline f1Dec)
, (f2, Inline f2Dec)
, (f3, Inline f3Dec)
, (f4, Inline f4Dec)
, (f5, Inline f5Dec)
, (f6, Inline f6Dec)
, (f7, Inline f7Dec)
]
}
pure
NamedSchema
{ _namedSchemaName = Just . T.pack . symbolVal $ Proxy @name
, _namedSchemaSchema = nfSchema
}
instance
( KnownSymbol name
, KnownSymbol f1
, ToSchema a1
, KnownSymbol f2
, ToSchema a2
, KnownSymbol f3
, ToSchema a3
, KnownSymbol f4
, ToSchema a4
, KnownSymbol f5
, ToSchema a5
, KnownSymbol f6
, ToSchema a6
, KnownSymbol f7
, ToSchema a7
, KnownSymbol f8
, ToSchema a8
)
=> ToSchema (NF8 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8)
where
declareNamedSchema _ = do
f1Dec <- declareSchema $ Proxy @a1
f2Dec <- declareSchema $ Proxy @a2
f3Dec <- declareSchema $ Proxy @a3
f4Dec <- declareSchema $ Proxy @a4
f5Dec <- declareSchema $ Proxy @a5
f6Dec <- declareSchema $ Proxy @a6
f7Dec <- declareSchema $ Proxy @a7
f8Dec <- declareSchema $ Proxy @a8
let f1 = T.pack . symbolVal $ Proxy @f1
let f2 = T.pack . symbolVal $ Proxy @f2
let f3 = T.pack . symbolVal $ Proxy @f3
let f4 = T.pack . symbolVal $ Proxy @f4
let f5 = T.pack . symbolVal $ Proxy @f5
let f6 = T.pack . symbolVal $ Proxy @f6
let f7 = T.pack . symbolVal $ Proxy @f7
let f8 = T.pack . symbolVal $ Proxy @f8
-- Not sure we should be inlining the schema. Let
let nfSchema :: Schema
nfSchema =
mempty
{ _schemaRequired = [f1, f2, f3, f4, f5, f6, f7, f8]
, _schemaProperties =
[ (f1, Inline f1Dec)
, (f2, Inline f2Dec)
, (f3, Inline f3Dec)
, (f4, Inline f4Dec)
, (f5, Inline f5Dec)
, (f6, Inline f6Dec)
, (f7, Inline f7Dec)
, (f8, Inline f8Dec)
]
}
pure
NamedSchema
{ _namedSchemaName = Just . T.pack . symbolVal $ Proxy @name
, _namedSchemaSchema = nfSchema
}
instance
( KnownSymbol name
, KnownSymbol f1
, ToSchema a1
, KnownSymbol f2
, ToSchema a2
, KnownSymbol f3
, ToSchema a3
, KnownSymbol f4
, ToSchema a4
, KnownSymbol f5
, ToSchema a5
, KnownSymbol f6
, ToSchema a6
, KnownSymbol f7
, ToSchema a7
, KnownSymbol f8
, ToSchema a8
, KnownSymbol f9
, ToSchema a9
)
=> ToSchema (NF9 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8 f9 a9)
where
declareNamedSchema _ = do
f1Dec <- declareSchema $ Proxy @a1
f2Dec <- declareSchema $ Proxy @a2
f3Dec <- declareSchema $ Proxy @a3
f4Dec <- declareSchema $ Proxy @a4
f5Dec <- declareSchema $ Proxy @a5
f6Dec <- declareSchema $ Proxy @a6
f7Dec <- declareSchema $ Proxy @a7
f8Dec <- declareSchema $ Proxy @a8
f9Dec <- declareSchema $ Proxy @a9
let f1 = T.pack . symbolVal $ Proxy @f1
let f2 = T.pack . symbolVal $ Proxy @f2
let f3 = T.pack . symbolVal $ Proxy @f3
let f4 = T.pack . symbolVal $ Proxy @f4
let f5 = T.pack . symbolVal $ Proxy @f5
let f6 = T.pack . symbolVal $ Proxy @f6
let f7 = T.pack . symbolVal $ Proxy @f7
let f8 = T.pack . symbolVal $ Proxy @f8
let f9 = T.pack . symbolVal $ Proxy @f9
-- Not sure we should be inlining the schema. Let
let nfSchema :: Schema
nfSchema =
mempty
{ _schemaRequired = [f1, f2, f3, f4, f5, f6, f7, f8, f9]
, _schemaProperties =
[ (f1, Inline f1Dec)
, (f2, Inline f2Dec)
, (f3, Inline f3Dec)
, (f4, Inline f4Dec)
, (f5, Inline f5Dec)
, (f6, Inline f6Dec)
, (f7, Inline f7Dec)
, (f8, Inline f8Dec)
, (f9, Inline f9Dec)
]
}
pure
NamedSchema
{ _namedSchemaName = Just . T.pack . symbolVal $ Proxy @name
, _namedSchemaSchema = nfSchema
}