on develop help sign in
Parsing resources + methods
24d1d6bBrendan Hay
gen/src/Gen/Types.hs+40−1
@@ -36,6 +36,7 @@ import Data.Aeson hiding (Bool, String)
36import Data.Aeson.TH
36import Data.Aeson.TH
37import Data.Char
37import Data.Char
38import Data.Function (on)
38import Data.Function (on)
39+import qualified Data.HashMap.Strict as Map
39import Data.List.NonEmpty (NonEmpty (..))
40import Data.List.NonEmpty (NonEmpty (..))
40import qualified Data.List.NonEmpty as NE
41import qualified Data.List.NonEmpty as NE
41import Data.Maybe
42import Data.Maybe
@@ -301,6 +302,44 @@ instance ToJSON Data where
301 , "lenses" .= ls
302 , "lenses" .= ls
302 ]
303 ]
303
304
305+data Method = Method
306+ { _mId :: Text
307+ , _mPath :: Text
308+ , _mMethod :: Text
309+ , _mDescription :: Help
310+ , _mParameters :: Map Id Param
311+ , _mParameterOrder :: [Id]
312+ , _mScopes :: [Text]
313+ , _mRequest :: Maybe Id
314+ , _mResponse :: Maybe Id
315+ } deriving (Generic)
316+
317+instance FromJSON Method where
318+ parseJSON = withObject "method" $ \o -> Method
319+ <$> o .: "id"
320+ <*> o .: "path"
321+ <*> o .: "httpMethod"
322+ <*> o .: "description"
323+ <*> o .: "parameters"
324+ <*> o .:? "parameterOrder" .!= mempty
325+ <*> o .: "scopes"
326+ <*> ref o "request"
327+ <*> ref o "response"
328+ where
329+ ref o k = Just <$> (o .: k >>= (.: "$ref"))
330+ <|> pure Nothing
331+
332+deriveToJSON (js "_m") ''Method
333+
334+newtype Resource = Resource { methods :: Map Id Method }
335+ deriving (ToJSON)
336+
337+deriveFromJSON (js "") ''Resource
338+
339+-- instance FromJSON Resource where
340+-- parseJSON = withObject "resource" $ \o ->
341+-- o .: "methods" -- <|> fail (show (Map.lookup "methods" o))
342+
304data Service a = Service
343data Service a = Service
305 { _svcLibrary :: Text
344 { _svcLibrary :: Text
306 , _svcTitle :: Text
345 , _svcTitle :: Text
@@ -321,7 +360,7 @@ data Service a = Service
321 , _svcAuth :: Maybe Object
360 , _svcAuth :: Maybe Object
322 , _svcParameters :: Map Id Param
361 , _svcParameters :: Map Id Param
323 , _svcSchemas :: Map Id a
362 , _svcSchemas :: Map Id a
324− , _svcResources :: Object
363+ , _svcResources :: Map Id Resource
325 } deriving (Generic)
364 } deriving (Generic)
326
365
327deriveFromJSON (js "_svc") ''Service
366deriveFromJSON (js "_svc") ''Service
gen/template/toc.ede+1−1
@@ -6,7 +6,7 @@
6module {{ moduleName }}
6module {{ moduleName }}
7 (
7 (
8 -- * API Definition
8 -- * API Definition
9− {{ name }}
9+ {{ name | lowerHead }}
10
10
11 -- * Resources
11 -- * Resources
12 -- $resources
12 -- $resources
gen/template/types.ede+4−3
@@ -3,7 +3,8 @@
3module {{ moduleName }}
3module {{ moduleName }}
4 (
4 (
5 -- * API Definition
5 -- * API Definition
6− {{ name }}
6+ {{ name | lowerHead }}
7+
7 {% for schema in schemas %}
8 {% for schema in schemas %}
8 {% case schema.value.type %}
9 {% case schema.value.type %}
9 {% when "prod" %}
10 {% when "prod" %}
@@ -26,8 +27,8 @@ module {{ moduleName }}
26import {{ import.value }}
27import {{ import.value }}
27{% endfor %}
28{% endfor %}
28
29
29−{{ name }} :: a
30+{{ name | lowerHead }} :: a
30−{{ name }} = error "{{ name }}"
31+{{ name | lowerHead }} = error "{{ name }}"
31{% for schema in schemas %}
32{% for schema in schemas %}
32
33
33 {% include "_include/type.ede" with type = schema.value %}
34 {% include "_include/type.ede" with type = schema.value %}