(* -*- mode: tuareg; -*- *) let root _req = Views.root () module Repo = struct let ( let* ) m f = let open Lwt.Infix in m >>= function | Ok x -> f x | Error e -> let msg = Format.asprintf "%a" Resolvers.Store.pp_error e in Views.error_page msg let summary req = let repo = Dream.param req "repo" in let* branches = Resolvers.all_branches repo in let* commits = Resolvers.recent_commits repo 10 in let authors = [ "John Pork"; "Sebastian Jellybean" ] in Views.Repo.summary repo branches commits authors let log req = let repo = Dream.param req "repo" in let* commits = Resolvers.recent_commits repo 100 in Views.Repo.log repo commits let files_at_head req = let repo = Dream.param req "repo" in let* tree = Resolvers.head_tree repo in Views.Repo.files repo tree let file_id req = let repo = Dream.param req "repo" in let id = Dream.param req "repo" in let* blob = Resolvers.blob_of_id repo id in Views.Repo.file repo blob let refs req = let repo = Dream.param req "repo" in let* branches = Resolvers.all_branches repo in Views.Repo.refs repo branches let commit req = let repo = Dream.param req "repo" in let id = Dream.param req "id" in let* commit = Resolvers.commit_of_id repo id in Views.Repo.commit repo commit end let all_handlers = let open Dream in [ get "/" root; scope "/:repo" [] Repo. [ get "/" summary; get "/summary/" summary; get "/log/" log; get "/files/" files_at_head; get "/files/:id" file_id; get "/refs/" refs; get "/commit/:id" commit; ]; get "/static/**" (static "./lib/static"); ]