@@ -13,20 +13,25 @@
14module Gen.Types where
14module Gen.Types where
16import Data.Aeson
17import Data.Aeson
17import Data.Aeson.TH
18import Data.Aeson.TH
18import qualified Data.Attoparsec.Text as A
19import qualified Data.Attoparsec.Text as A
19import Data.Char
20import Data.Char
20import Data.Function (on)
21import Data.Function (on)
21import qualified Data.HashMap.Strict as Map
22import qualified Data.HashMap.Strict as Map
22−import Data.List (nub, sort)
23+import Data.List (groupBy, nub, sort)
23−import Data.Monoid
24+import Data.List.NonEmpty (NonEmpty (..), nonEmpty)
25+import qualified Data.List.NonEmpty as NE
24import Data.Ord
26import Data.Ord
25import Data.Text (Text)
28import Data.Text (Text)
26import qualified Data.Text as Text
29import qualified Data.Text as Text
27import qualified Data.Text.Lazy as LText
30import qualified Data.Text.Lazy as LText
31+import Data.Text.Manipulate
28import qualified Filesystem.Path.CurrentOS as Path
32import qualified Filesystem.Path.CurrentOS as Path
29import Gen.JSON
33import Gen.JSON
30import GHC.TypeLits
35import GHC.TypeLits
31import Text.EDE (Template)
36import Text.EDE (Template)
@@ -58,6 +63,8 @@ data Versions = Versions
58 , _coreVersion :: CoreVer
63 , _coreVersion :: CoreVer
59 } deriving (Show)
64 } deriving (Show)
66+-- makeClassy ''Versions
61-- FIXME: need a more comprehensive 'vm_alpha' vs 'vm1.1' etc check.
68-- FIXME: need a more comprehensive 'vm_alpha' vs 'vm1.1' etc check.
62data Spec = Spec
69data Spec = Spec
63 { _specName :: Text
70 { _specName :: Text
@@ -96,20 +103,15 @@ instance FromJSON Protocol where
96 e -> fail $ "Unable to parse protocol from " ++ Text.unpack e
103 e -> fail $ "Unable to parse protocol from " ++ Text.unpack e
98data Service = Service
105data Service = Service
99− { _svcKind :: Text
106+ { _svcTitle :: Text
101− , _svcDiscoveryVersion :: Text
103 , _svcName :: Text
107 , _svcName :: Text
104 , _svcCanonicalName :: Maybe Text
108 , _svcCanonicalName :: Maybe Text
106− , _svcVersion :: Text
107− , _svcRevision :: Maybe Text
108 , _svcDescription :: Text
109 , _svcDescription :: Text
109− , _svcOwnerDomain :: Text
110+ , _svcRevision :: Maybe Text
111+ , _svcVersion :: Text
110 , _svcOwnerName :: Text
112 , _svcOwnerName :: Text
113+ , _svcOwnerDomain :: Text
111 , _svcPackagePath :: Maybe Text
114 , _svcPackagePath :: Maybe Text
112− , _svcIcons :: Object
113 , _svcDocumentationLink :: Text
115 , _svcDocumentationLink :: Text
114 , _svcProtocol :: Protocol
116 , _svcProtocol :: Protocol
115 , _svcBaseUrl :: Text
117 , _svcBaseUrl :: Text
@@ -122,3 +124,27 @@ data Service = Service
122 } deriving (Show)
124 } deriving (Show)
124deriveFromJSON (js "_svc") ''Service
126deriveFromJSON (js "_svc") ''Service
128+data Library = Library
131+ , _libDescriptions :: [Text]
132+ , _libNamespace :: NS
133+ , _libVersions :: Versions
134+ , _libServices :: NonEmpty Service
137+mergeLibraries :: Versions -> [Service] -> [Library]
138+mergeLibraries v = map go . groupBy (on (==) _svcName)
141+ go (x:xs) = (mk x) { _libServices = x :| xs }
144+ { _libName = "gozen-" <> Text.toLower (_svcName x)
145+ , _libTitle = _svcTitle x
146+ , _libDescriptions = []
147+ , _libNamespace = "Network.Google" <> mkNS (toPascal (_svcName x))
149+ , _libServices = x :| []