@@ -34,11 +34,10 @@ import Control.Applicative
34import Control.Lens hiding ((.=))
34import Control.Lens hiding ((.=))
35import Data.Aeson hiding (Bool, String)
35import Data.Aeson hiding (Bool, String)
36import Data.Aeson.TH
36import Data.Aeson.TH
38import Data.Char
37import Data.Char
39import Data.Function (on)
38import Data.Function (on)
40−import qualified Data.HashMap.Strict as Map
41import qualified Data.HashSet as Set
39import qualified Data.HashSet as Set
40+import Data.List (groupBy)
42import Data.List.NonEmpty (NonEmpty (..))
41import Data.List.NonEmpty (NonEmpty (..))
43import qualified Data.List.NonEmpty as NE
42import qualified Data.List.NonEmpty as NE
44import Data.Maybe
43import Data.Maybe
@@ -48,10 +47,11 @@ import Data.Text (Text)
48import qualified Data.Text as Text
47import qualified Data.Text as Text
49import qualified Data.Text.Lazy as LText
48import qualified Data.Text.Lazy as LText
50import qualified Data.Text.Lazy.Builder as Build
49import qualified Data.Text.Lazy.Builder as Build
50+import Data.Text.Manipulate
51import qualified Data.Text.Read as Read
51import qualified Data.Text.Read as Read
52import qualified Filesystem.Path.CurrentOS as Path
52import qualified Filesystem.Path.CurrentOS as Path
53import Formatting
53import Formatting
54−import Gen.Orphans
54+import Gen.Orphans ()
55import Gen.Text
55import Gen.Text
56import Gen.Types.Help
56import Gen.Types.Help
57import Gen.Types.Id
57import Gen.Types.Id
@@ -400,7 +400,9 @@ instance ToJSON (Service Data API) where
402svcAbbrev :: Service s r -> Text
402svcAbbrev :: Service s r -> Text
403+svcAbbrev s = upperHead
403−svcAbbrev s = renameAbbrev $ fromMaybe (_svcTitle s) (_svcCanonicalName s)
405+ $ fromMaybe (_svcTitle s) (_svcCanonicalName s)
405typeImports, prodImports, sumImports :: Service s r -> [NS]
407typeImports, prodImports, sumImports :: Service s r -> [NS]
406typeImports s = ["Network.Google.Prelude", prodNS s, sumNS s]
408typeImports s = ["Network.Google.Prelude", prodNS s, sumNS s]
@@ -409,7 +411,7 @@ sumImports _ = ["Network.Google.Prelude"]
410tocNS, typesNS, prodNS, sumNS :: Service s r -> NS
412tocNS, typesNS, prodNS, sumNS :: Service s r -> NS
411tocNS s = NS ["Network", "Google", svcAbbrev s]
413tocNS s = NS ["Network", "Google", svcAbbrev s]
412−typesNS = (<> "Types") . tocNS
414+typesNS = (<> "Types") . tocNS
413prodNS = (<> "Product") . typesNS
415prodNS = (<> "Product") . typesNS
414sumNS = (<> "Sum") . typesNS
416sumNS = (<> "Sum") . typesNS
@@ -436,3 +438,18 @@ instance ToJSON Library where
436 , "exposedModules" .= concatMap exposedModules (NE.toList _libServices)
438 , "exposedModules" .= concatMap exposedModules (NE.toList _libServices)
437 , "otherModules" .= concatMap otherModules (NE.toList _libServices)
439 , "otherModules" .= concatMap otherModules (NE.toList _libServices)
442+merge :: Versions -> [Service Data API] -> [Library]
443+merge v = map go . groupBy (on (==) _svcLibrary)
446+ go (x:xs) = (mk x) { _libServices = x :| xs }
448+ go [] = error "Empty merge set!"
451+ { _libName = renameLibrary (_svcLibrary x)
452+ , _libTitle = renameTitle (_svcTitle x)
454+ , _libServices = x :| []