Source

ocaml-bitbucket / api.ml

camlspotter ab68943 
camlspotter 4fafae1 

camlspotter 31339bc 
camlspotter d0b5325 


camlspotter 4fafae1 

camlspotter d0b5325 
camlspotter 4fafae1 
camlspotter d0b5325 

camlspotter ab68943 
camlspotter d5035b3 
camlspotter 31339bc 
camlspotter d5035b3 





camlspotter ab68943 
camlspotter 32095fd 
camlspotter ab68943 

camlspotter b760f49 

camlspotter d0b5325 
camlspotter 32095fd 



























camlspotter b760f49 

camlspotter 32095fd 


camlspotter b760f49 














camlspotter d0b5325 

camlspotter b760f49 
camlspotter d0b5325 






camlspotter 4fafae1 
camlspotter d0b5325 



camlspotter b760f49 

















camlspotter ab68943 
open Common
open Tiny_json
open Json_conv
open Meta_conv.Open
open Sexplib.Conv

module Json = struct
  include Json
  let sexp_of_t j = Sexplib.Sexp.Atom (Json.show j)
  let t_of_sexp = function
    | Sexplib.Sexp.Atom s -> Json.parse s
    | _ -> assert false
end

module Address = struct
  include Meta_conv.Types.Address
  let sexp_of_t _ = Sexplib.Sexp.Atom ""
  let t_of_sexp _ = top
end

type 'target fields = (string * ('target * Address.t)) list with sexp

module Scheme = struct
  type t = Hg(:"hg":) | Git(:"git":) with conv(json), sexp
end

(** repositories Endpoint *)
module Repositories = struct

  module Repository = struct
    type t = {
      scm               : Scheme.t;
      has_wiki          : bool;
      last_updated      : string;
      created_on        : string;
      owner             : string;
      logo              : string;
      email_mailinglist : string option;
      is_mq             : bool;
      size              : int;
      read_only         : bool;
      followers_count   : int;
      state             : string; (* "str(available)" *)
      utc_created_on    : string;
      website           : string option;
      description       : string option;
      has_issues        : bool;
      is_fork           : bool;
      slug              : string;
      is_private        : bool;
      name              : string;
      language          : string;
      utc_last_updated  : string;
      email_writers     : bool;
      no_public_forks   : bool;
      resource_uri      : string;
      fork_of           : t option;
      mq_of             : t option;
      creator           : string option;
    } with conv(json), sexp
  end


end

(** user Endpoint *)
module User = struct

  type user = {
    username     : string;
    first_name   : string;
    last_name    : string;
    is_team      : bool;
    avatar       : string;
    resource_uri : string
  } with conv(json), sexp

  type resp = {
    user : user;
    repositories : Repositories.Repository.t list;
  } with conv(json), sexp

  let get ~user ~password = 
    let s = Curl.get_string (fun h ->
      h#set_url "https://api.bitbucket.org/1.0/user";
      h#set_userpwd (Printf.sprintf "%s:%s" user password))
    in
    try resp_of_json_exn (Json.parse s) with e -> 
      prerr_endline (Printexc.to_string e);
      prerr_endline s;
      raise e

  module Repositories = struct

    type repo = { 
      owner      : string;
      scm        : Scheme.t;
      slug       : string;
      is_private : bool;
      name       : string
    } 

    and resp = repo list with conv(json)

    let get ~user ~password = 
      resp_of_json (Json.parse (Curl.get_string (fun h ->
        h#set_url "https://api.bitbucket.org/1.0/user/repositories/";
        h#set_userpwd (Printf.sprintf "%s:%s" user password))))
  end

end