X-Git-Url: http://www.average.org/gitweb/?p=pdns-pipe-nmc.git;a=blobdiff_plain;f=NmcJson.hs;h=f7733669e33b08f0ac8bd341d7702dee249d3699;hp=1d8bc9c0acd2787416be65612b40ed1280e98a97;hb=7350de03fb105bb8f46e96160bcb32fc75f04d61;hpb=6970cec92480e5b3ab3d82d120f5877181fa8589 diff --git a/NmcJson.hs b/NmcJson.hs index 1d8bc9c..f773366 100644 --- a/NmcJson.hs +++ b/NmcJson.hs @@ -105,22 +105,31 @@ instance FromJSON NmcRes where <*> o .: "expires_in" parseJSON _ = empty +normalizeDom :: NmcDom -> NmcDom +normalizeDom dom + | domNs dom /= Nothing = emptyNmcDom { domNs = domNs dom } + | domDelegate dom /= Nothing = emptyNmcDom -- FIXME + | domTranslate dom /= Nothing = dom { domMap = Nothing } + | otherwise = dom + descendNmc :: [String] -> NmcDom -> NmcDom -descendNmc subdom dom = case subdom of - [] -> - case domMap dom of - Nothing -> dom - Just map -> - case M.lookup "" map of -- Stupid, but "" is allowed in the map - Nothing -> dom -- Try to merge it with the root data - Just sub -> mergeNmc sub dom - d:ds -> - case domMap dom of - Nothing -> emptyNmcDom - Just map -> - case M.lookup d map of - Nothing -> emptyNmcDom - Just sub -> descendNmc ds sub +descendNmc subdom rawdom = + let dom = normalizeDom rawdom + in case subdom of + [] -> + case domMap dom of + Nothing -> dom + Just map -> + case M.lookup "" map of -- Stupid, but there are "" in the map + Nothing -> dom -- Try to merge it with the root data + Just sub -> mergeNmc sub dom -- Or maybe drop it altogether... + d:ds -> + case domMap dom of + Nothing -> emptyNmcDom + Just map -> + case M.lookup d map of + Nothing -> emptyNmcDom + Just sub -> descendNmc ds sub -- FIXME -- I hope there exists a better way to merge records! mergeNmc :: NmcDom -> NmcDom -> NmcDom