as2.ml 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. (*
  2. * _ _ ____ _
  3. * _| || |_/ ___| ___ _ __ _ __ ___ | |
  4. * |_ .. _\___ \ / _ \ '_ \| '_ \ / _ \| |
  5. * |_ _|___) | __/ |_) | |_) | (_) |_|
  6. * |_||_| |____/ \___| .__/| .__/ \___/(_)
  7. * |_| |_|
  8. *
  9. * Personal Social Web.
  10. *
  11. * Copyright (C) The #Seppo contributors. All rights reserved.
  12. *
  13. * This program is free software: you can redistribute it and/or modify
  14. * it under the terms of the GNU General Public License as published by
  15. * the Free Software Foundation, either version 3 of the License, or
  16. * (at your option) any later version.
  17. *
  18. * This program is distributed in the hope that it will be useful,
  19. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  21. * GNU General Public License for more details.
  22. *
  23. * You should have received a copy of the GNU General Public License
  24. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  25. *)
  26. open Astring
  27. (*
  28. * https://www.w3.org/TR/activitystreams-core/
  29. * https://www.w3.org/TR/activitystreams-core/#media-type
  30. *)
  31. module No_p_yes = struct
  32. type t = No | Pending | Yes
  33. (** tristate with pending *)
  34. let to_string = function
  35. | No -> "no"
  36. | Pending -> "pending"
  37. | Yes -> "yes"
  38. let of_string = function
  39. | "no" -> Some No
  40. | "pending" -> Some Pending
  41. | "yes"
  42. | "on" -> Some Yes (* convenience for html form submit feedback *)
  43. | _ -> None
  44. end
  45. let examine_response j =
  46. let ok = function
  47. | `O ["error", `String e] -> Error e
  48. | _ ->
  49. Logr.warn (fun m -> m "unknown response: %s" j);
  50. Error ("unknown response: " ^ j) in
  51. let error = function
  52. | `Error _ as e ->
  53. let e = e |> Ezjsonm.read_error_description in
  54. Logr.warn (fun m -> m "json parsing error: '%s' in '%s'" e j);
  55. Error ("json parsing error '" ^ e ^ "' in '" ^ j ^ "'")
  56. | `Unexpected _ ->
  57. Logr.warn (fun m -> m "unexpected json: '%s'" j);
  58. Error ("unexpected json '" ^ j ^ "'")
  59. | `End_of_input -> Error "end of input"
  60. in
  61. j
  62. |> Ezjsonm.value_from_string_result
  63. |> Result.fold ~ok ~error
  64. (*
  65. let ns_as = As2_vocab.Constants.ActivityStreams.ns_as
  66. let ns_sec = As2_vocab.Constants.ActivityStreams.ns_sec
  67. let public = As2_vocab.Constants.ActivityStreams.public
  68. *)