1 {-# LANGUAGE TemplateHaskell #-}
3 module Gargantext.API.Node.Corpus.Types where
5 import Control.Lens hiding (elements, Empty)
6 import Control.Monad.Fail (fail)
8 import Data.Aeson.TH (deriveJSON)
9 import Data.Monoid (mempty)
11 import GHC.Generics (Generic)
12 import Test.QuickCheck
13 import qualified Data.Text as T
15 import Gargantext.Prelude
17 import qualified Gargantext.API.Admin.Orchestrator.Types as Types
18 import Gargantext.Core.Utils.Prefix (unPrefix)
19 import Gargantext.Database.Action.Flow (DataOrigin(..))
27 deriving (Eq, Show, Generic, Enum, Bounded)
29 instance Arbitrary Database where
30 arbitrary = arbitraryBoundedEnum
32 deriveJSON (unPrefix "") ''Database
33 instance ToSchema Database where
34 declareNamedSchema = genericDeclareNamedSchemaUnrestricted defaultSchemaOptions
36 database2origin :: Database -> DataOrigin
37 database2origin Empty = InternalOrigin Types.IsTex
38 database2origin PubMed = ExternalOrigin Types.PubMed
39 database2origin Arxiv = ExternalOrigin Types.Arxiv
40 database2origin HAL = ExternalOrigin Types.HAL
41 database2origin IsTex = ExternalOrigin Types.IsTex
42 database2origin Isidore = ExternalOrigin Types.Isidore
44 ------------------------------------------------------------------------
45 data Datafield = Gargantext
49 deriving (Eq, Show, Generic)
51 instance FromJSON Datafield where
52 parseJSON (String "Gargantext") = pure Gargantext
53 parseJSON (String "Web") = pure Web
54 parseJSON (String "Files") = pure Files
55 parseJSON (Object o) = do
58 parseJSON x = withText "Datafield" (\text ->
59 fail $ "Cannot match pattern '<db>' for string " <> T.unpack text) x
61 instance ToJSON Datafield where
62 toJSON (External db) = toJSON $ object [ ("External", toJSON db) ]
63 toJSON s = toJSON $ show s
65 instance Arbitrary Datafield where
66 arbitrary = oneof [pure Gargantext, pure Web, pure Files, External <$> arbitrary]
68 instance ToSchema Datafield where
69 declareNamedSchema _ = do
70 return $ NamedSchema (Just "Datafield") $ mempty
71 & type_ ?~ SwaggerObject