open Config let rec deps_of_zone = function | ZoneIpv4 _ | ZoneIpv6 _ -> [] | Zone z -> [z] | ZoneList l -> List.flatten (List.map deps_of_zone l) | ZoneExclude e -> deps_of_zone e let deps_of_zones zone = List.map (fun (a, b) -> (a, deps_of_zone b)) zone let compile_zone _ _ = [] let compile_zones zones = let deps = deps_of_zones zones in match Tsort.sort deps with | Tsort.Sorted sorted -> List.fold_right (fun name acc -> let values = List.assoc name zones in let compiled = compile_zone acc values in (name, compiled) :: acc) sorted [] | _ -> assert false