# HG changeset patch # User wenzelm # Date 1576617517 -3600 # Node ID 0e3a3e3cf482b8f47b736a0fd8529fed0bac4642 # Parent 3fdd0b93fa4b55ccd9fa2ff3b4b948258713ea84 clarified signature: error_code may contain low-level message instead of proper "ERR-" code; diff -r 3fdd0b93fa4b -r 0e3a3e3cf482 src/Pure/Tools/phabricator.scala --- a/src/Pure/Tools/phabricator.scala Tue Dec 17 22:06:24 2019 +0100 +++ b/src/Pure/Tools/phabricator.scala Tue Dec 17 22:18:37 2019 +0100 @@ -909,74 +909,24 @@ { /* result with optional error */ - object Error_Code extends Enumeration + sealed case class Result(result: JSON.T, error: Option[String]) { - val bad_diff = Value("ERR-BAD-DIFF") - val bad_document = Value("ERR-BAD-DOCUMENT") - val bad_file = Value("ERR-BAD-FILE") - val bad_phid = Value("ERR-BAD-PHID") - val bad_revision = Value("ERR-BAD-REVISION") - val bad_task = Value("ERR-BAD-TASK") - val bad_token = Value("ERR-BAD-TOKEN") - val bad_version = Value("ERR-BAD-VERSION") - val conduit_call = Value("ERR-CONDUIT-CALL") - val conduit_core = Value("ERR-CONDUIT-CORE") - val invalid_auth = Value("ERR-INVALID-AUTH") - val invalid_certificate = Value("ERR-INVALID-CERTIFICATE") - val invalid_engine_ = Value("ERR-INVALID_ENGINE") // FIXME !? - val invalid_engine = Value("ERR-INVALID-ENGINE") - val invalid_parameter = Value("ERR-INVALID-PARAMETER") - val invalid_session = Value("ERR-INVALID-SESSION") - val invalid_token = Value("ERR-INVALID-TOKEN") - val invalid_usage = Value("ERR-INVALID-USAGE") - val invalid_user = Value("ERR-INVALID-USER") - val need_diff = Value("ERR-NEED-DIFF") - val need_file = Value("ERR-NEED-FILE") - val no_certificate = Value("ERR-NO-CERTIFICATE") - val no_content = Value("ERR-NO-CONTENT") - val no_effect = Value("ERR-NO-EFFECT") - val no_paste = Value("ERR-NO-PASTE") - val not_found = Value("ERR-NOT-FOUND") - val not_pusher = Value("ERR-NOT-PUSHER") - val oauth_access = Value("ERR-OAUTH-ACCESS") - val permissions = Value("ERR-PERMISSIONS") - val rate_limit = Value("ERR-RATE-LIMIT") - val unknown_client = Value("ERR-UNKNOWN-CLIENT") - val unknown_repository = Value("ERR-UNKNOWN-REPOSITORY") - val unknown_type = Value("ERR-UNKNOWN-TYPE") - val unknown_vcs_type = Value("ERR-UNKNOWN-VCS-TYPE") - val unsupported_vcs = Value("ERR-UNSUPPORTED-VCS") - - val unknown_error = Value("ERR-UNKNOWN-ERROR") - } - - sealed case class Result( - result: JSON.T, - error_code: Option[Error_Code.Value], - error_info: String) - { - def ok: Boolean = error_code.isEmpty && error_info.isEmpty - - def get: JSON.T = - if (error_info.nonEmpty) error(error_info) - else if (error_code.nonEmpty) error(error_code.get.toString) - else result + def ok: Boolean = error.isEmpty + def get: JSON.T = if (ok) result else Exn.error(error.get) def get_value[A](unapply: JSON.T => Option[A]): A = - unapply(get) getOrElse error("Bad JSON result: " + JSON.Format(result)) + unapply(get) getOrElse Exn.error("Bad JSON result: " + JSON.Format(result)) def get_string: String = get_value(JSON.Value.String.unapply) } - def make_error_code(str: String): Error_Code.Value = - try { Error_Code.withName(str) } - catch { case _: java.util.NoSuchElementException => Error_Code.unknown_error } - def make_result(json: JSON.T): Result = - Result( - JSON.value(json, "result").getOrElse(JSON.Object.empty), - JSON.string(json, "error_code").map(make_error_code), - JSON.string(json, "error_info").getOrElse("")) + { + val result = JSON.value(json, "result").getOrElse(JSON.Object.empty) + val error_info = JSON.string(json, "error_info") + val error_code = JSON.string(json, "error_code") + Result(result, error_info orElse error_code) + } /* repository operations */