diff options
author | 2024-12-17 20:34:31 +0100 | |
---|---|---|
committer | 2025-02-19 18:09:41 +0100 | |
commit | d29d951cf8c5558511830a85bb91ab030711b7e7 (patch) | |
tree | 88fa48bad69815b7e2a30cb9de3393343c555c6c /autotypes/src/AutoTypes/Unify.hs | |
parent | fe07f05b8e4f0c7e6eec2714ee1ed5a67b227eda (diff) |
ignore nulls in types
Diffstat (limited to 'autotypes/src/AutoTypes/Unify.hs')
-rw-r--r-- | autotypes/src/AutoTypes/Unify.hs | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/autotypes/src/AutoTypes/Unify.hs b/autotypes/src/AutoTypes/Unify.hs index bfbd05b..29d7ed2 100644 --- a/autotypes/src/AutoTypes/Unify.hs +++ b/autotypes/src/AutoTypes/Unify.hs @@ -16,12 +16,13 @@ import qualified Data.Aeson as A import qualified Data.Aeson.Encode.Pretty as A import qualified Data.Aeson.Key as K import qualified Data.Aeson.KeyMap as KM -import qualified Data.ByteString.Lazy.Char8 as BL import Data.Aeson.QQ +import qualified Data.ByteString.Lazy.Char8 as BL import Data.List (intercalate, nub) import Data.Map (Map) import qualified Data.Map as M import qualified Data.Map.Merge.Lazy as M +import Data.Maybe import qualified Data.Set as S import qualified Data.Text as T import Data.Time.Clock @@ -175,31 +176,31 @@ unify (Option Nothing) (Option (Just r)) = Right (Option (Just r)) unify (Option (Just l)) (Option (Just r)) = Option . Just <$> unify l r -} -object :: Map String T -> T -object = Object +object :: Map String T -> Maybe T +object = Just . Object -list :: Maybe T -> T -list = List +list :: Maybe T -> Maybe T +list = Just . List -string, number, bool, dateTime, null :: T -string = Scalar String -number = Scalar Number -bool = Scalar Bool -dateTime = Scalar DateTime -null = Option Nothing +string, number, bool, dateTime, null :: Maybe T +string = Just (Scalar String) +number = Just (Scalar Number) +bool = Just (Scalar Bool) +dateTime = Just (Scalar DateTime) +null = Nothing data InferException = InferException [T] deriving (Show) instance Exception InferException -fromJson :: A.Value -> T +fromJson :: A.Value -> Maybe T fromJson (A.Object kvs) = case map (first K.toString) (KM.toList kvs) of - [("$ref", A.String i)] -> Reference (takeDirectory (T.unpack i)) - _ -> object (M.mapKeys K.toString (M.map fromJson (KM.toMap kvs))) + [("$ref", A.String i)] -> Just (Reference (takeDirectory (T.unpack i))) + _ -> object (M.mapKeys K.toString (M.mapMaybe fromJson (KM.toMap kvs))) fromJson t@(A.Array vs) = - let ts = map fromJson (V.toList vs) + let ts = mapMaybe fromJson (V.toList vs) in case nub ts of [] -> list Nothing [t] -> list (Just t) @@ -211,6 +212,7 @@ fromJson (A.Number _) = number fromJson (A.Bool _) = bool fromJson A.Null = null +{- object1 = [aesonQQ|{ "firstName": "firstName", @@ -263,7 +265,7 @@ main = ) ) ) - ) + )-} -- >>= unify (fromJson object2) -- >>= unify (fromJson object4) |