open Json_io open Json_type open Common module Http = Http.Simple type infos = Common.infos let create_view = create_view let version server = try let ans = Http.get server in Parser.version ans with Http_client.Http_protocol _ -> None let create server db = try let ans = Http.put (server^"/"^db) "" in Parser.ok ans with Http_client.Http_error(412, json) as e -> let ans = Parser.error json in if ans.error = "file_exists" then false else raise e let infos server db = try let ans = Http.get (server^"/"^db) in let infos = Parser.infos ans in Some infos with | Http_client.Http_error(404, json) as e -> let error = Parser.error json in if error.error = "not_found" then None else raise e let exists server db = match infos server db with | None -> false | Some _ -> true let delete server db = let ans = Http.delete (server^"/"^db) in Parser.ok ans let insert server db entry = let entry = string_of_json entry in let url = server ^ "/" ^ db ^ "/" in let ans = Http.post url entry in Parser.id_rev ans let get server db ~id = let url = server ^ "/" ^ db ^ "/" ^ id ^ "/" in let ans = Http.get url in json_of_string ans let design server db ?(language="javascript") ~name ~views = let url = server ^ "/" ^ db ^ "/_design/" ^ name in let design = json_of_design {language = language; views = views} in let design = string_of_json design in let ans = Http.put url design in Parser.id_rev ans let view server db ~design ~view = let ans = get server db ("/_design/" ^ design ^ "/_view/" ^ view) in Parser.view ans