@@ -52,9 +52,9 @@ runAST svc = evalState (runExceptT (render ss)) (initial (_svcSchemas ss))
5252
5353render :: Service (Schema Id) Resource -> AST (Service Data API)
5454render svc = do
55− x <- kvTraverseMaybe typ (_svcSchemas svc)
56− y <- Map.traverseWithKey api (_svcResources svc)
57− return $! svc { _svcSchemas = x, _svcResources = mempty }
55+ x <- kvTraverseMaybe typ (_svcSchemas svc)
56+ y <- api (_svcResources svc)
57+ return $! svc { _svcSchemas = x, _svcResources = y }
5858 where
5959 typ :: Id -> Schema Id -> AST (Maybe Data)
6060 typ k = \case
@@ -91,20 +91,26 @@ render svc = do
9191 "' with the minimum fields required to make a request.\n")
9292 k
9393
94− api :: Id -> Resource -> AST API
95− api k = fmap (API (aname k) . Map.fromList) . res k
94+ api :: Resource -> AST API
95+ api = fmap (API "API" . Map.fromList) . res Nothing
9696 where
97− res :: Id -> Resource -> AST [(Name, [Rendered])]
97+ res :: Maybe Id -> Resource -> AST [(Name, [Rendered])]
9898 res p = \case
9999 Parent rs -> traverse (parent p) (Map.toList rs) <&> concat
100− Sub ms -> traverse (sub p) (Map.toList ms)
100+ Sub ms | Just x <- p
101+ -> traverse (sub x) (Map.toList ms)
101102
102− parent :: Id -> (Local, Resource) -> AST [(Name, [Rendered])]
103− parent p (n, r) = res (mkProp p n) r
103+ parent :: Maybe Id -> (Local, Resource) -> AST [(Name, [Rendered])]
104+ parent p (n, r) = res (Just (pid p n)) r
104105
105106 sub :: Id -> (Local, Method) -> AST (Name, [Rendered])
106107 sub p (n, m) = (mname p n,) <$> traverse (pp None) (apiTypes svc p m)
107108
109+ -- FIXME: This breaks all naming invariants.
110+ pid :: Maybe Id -> Local -> Id
111+ pid Nothing = Free . Global . local
112+ pid (Just p) = mkProp p
113+
108114flatten :: Service (Fix Schema) Resource -> Service (Schema Id) Resource
109115flatten svc = svc { _svcSchemas = execState run mempty }
110116 where