fastpixapi 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. checksums.yaml +7 -0
  2. data/lib/crystalline/metadata_fields.rb +210 -0
  3. data/lib/crystalline/t.rb +78 -0
  4. data/lib/crystalline/utils.rb +95 -0
  5. data/lib/crystalline.rb +12 -0
  6. data/lib/fastpix_api_sdk/input_video.rb +454 -0
  7. data/lib/fastpix_api_sdk/manage_live_stream.rb +717 -0
  8. data/lib/fastpix_api_sdk/manage_videos.rb +960 -0
  9. data/lib/fastpix_api_sdk/models/components/audioinput.rb +41 -0
  10. data/lib/fastpix_api_sdk/models/components/audioinput_type.rb +19 -0
  11. data/lib/fastpix_api_sdk/models/components/createlivestreamrequest.rb +37 -0
  12. data/lib/fastpix_api_sdk/models/components/createlivestreamrequest_maxresolution.rb +21 -0
  13. data/lib/fastpix_api_sdk/models/components/createlivestreamrequest_metadata.rb +28 -0
  14. data/lib/fastpix_api_sdk/models/components/createmediarequest.rb +89 -0
  15. data/lib/fastpix_api_sdk/models/components/createmediarequest_accesspolicy.rb +22 -0
  16. data/lib/fastpix_api_sdk/models/components/createmediarequest_accessrestrictions.rb +37 -0
  17. data/lib/fastpix_api_sdk/models/components/createmediarequest_domains.rb +48 -0
  18. data/lib/fastpix_api_sdk/models/components/createmediarequest_domains_defaultpolicy.rb +23 -0
  19. data/lib/fastpix_api_sdk/models/components/createmediarequest_languagecode.rb +26 -0
  20. data/lib/fastpix_api_sdk/models/components/createmediarequest_maxresolution.rb +25 -0
  21. data/lib/fastpix_api_sdk/models/components/createmediarequest_metadata.rb +29 -0
  22. data/lib/fastpix_api_sdk/models/components/createmediarequest_mp4support.rb +22 -0
  23. data/lib/fastpix_api_sdk/models/components/createmediarequest_type.rb +22 -0
  24. data/lib/fastpix_api_sdk/models/components/createmediarequest_useragents.rb +48 -0
  25. data/lib/fastpix_api_sdk/models/components/createmediarequest_useragents_defaultpolicy.rb +23 -0
  26. data/lib/fastpix_api_sdk/models/components/createmediaresponse.rb +62 -0
  27. data/lib/fastpix_api_sdk/models/components/createmediaresponse_maxresolution.rb +24 -0
  28. data/lib/fastpix_api_sdk/models/components/createmediaresponse_metadata.rb +28 -0
  29. data/lib/fastpix_api_sdk/models/components/directupload.rb +58 -0
  30. data/lib/fastpix_api_sdk/models/components/directuploadresponse.rb +37 -0
  31. data/lib/fastpix_api_sdk/models/components/directuploadresponse_metadata.rb +28 -0
  32. data/lib/fastpix_api_sdk/models/components/getcreatelivestreamresponsedto.rb +85 -0
  33. data/lib/fastpix_api_sdk/models/components/getcreatelivestreamresponsedto_metadata.rb +28 -0
  34. data/lib/fastpix_api_sdk/models/components/getcreatelivestreamresponsedto_srtplaybackresponse.rb +37 -0
  35. data/lib/fastpix_api_sdk/models/components/getstreamsresponse.rb +41 -0
  36. data/lib/fastpix_api_sdk/models/components/imposetrack.rb +49 -0
  37. data/lib/fastpix_api_sdk/models/components/input.rb +28 -0
  38. data/lib/fastpix_api_sdk/models/components/inputmediasettings.rb +45 -0
  39. data/lib/fastpix_api_sdk/models/components/livestreamdeleteresponse.rb +33 -0
  40. data/lib/fastpix_api_sdk/models/components/livestreamgetresponse.rb +37 -0
  41. data/lib/fastpix_api_sdk/models/components/livestreamresponsedto.rb +37 -0
  42. data/lib/fastpix_api_sdk/models/components/media.rb +93 -0
  43. data/lib/fastpix_api_sdk/models/components/media_maxresolution.rb +24 -0
  44. data/lib/fastpix_api_sdk/models/components/media_metadata.rb +28 -0
  45. data/lib/fastpix_api_sdk/models/components/media_mp4support.rb +22 -0
  46. data/lib/fastpix_api_sdk/models/components/mediapolicy.rb +20 -0
  47. data/lib/fastpix_api_sdk/models/components/moderation.rb +34 -0
  48. data/lib/fastpix_api_sdk/models/components/pagination.rb +41 -0
  49. data/lib/fastpix_api_sdk/models/components/patchlivestreamrequest.rb +37 -0
  50. data/lib/fastpix_api_sdk/models/components/patchlivestreamrequest_metadata.rb +28 -0
  51. data/lib/fastpix_api_sdk/models/components/patchresponsedata.rb +85 -0
  52. data/lib/fastpix_api_sdk/models/components/patchresponsedata_metadata.rb +28 -0
  53. data/lib/fastpix_api_sdk/models/components/patchresponsedata_srtplaybackresponse.rb +37 -0
  54. data/lib/fastpix_api_sdk/models/components/patchresponsedto.rb +37 -0
  55. data/lib/fastpix_api_sdk/models/components/placement.rb +45 -0
  56. data/lib/fastpix_api_sdk/models/components/playbackid.rb +41 -0
  57. data/lib/fastpix_api_sdk/models/components/playbackid_accesspolicy.rb +21 -0
  58. data/lib/fastpix_api_sdk/models/components/playbackid_accessrestrictions.rb +37 -0
  59. data/lib/fastpix_api_sdk/models/components/playbackid_domains.rb +41 -0
  60. data/lib/fastpix_api_sdk/models/components/playbackid_domains_defaultpolicy.rb +20 -0
  61. data/lib/fastpix_api_sdk/models/components/playbackid_useragents.rb +41 -0
  62. data/lib/fastpix_api_sdk/models/components/playbackid_useragents_defaultpolicy.rb +20 -0
  63. data/lib/fastpix_api_sdk/models/components/playbackidrequest.rb +33 -0
  64. data/lib/fastpix_api_sdk/models/components/playbackidrequest_accesspolicy.rb +20 -0
  65. data/lib/fastpix_api_sdk/models/components/playbackidresponse.rb +37 -0
  66. data/lib/fastpix_api_sdk/models/components/playbackidresponse_data.rb +37 -0
  67. data/lib/fastpix_api_sdk/models/components/playbackids.rb +37 -0
  68. data/lib/fastpix_api_sdk/models/components/playbacksettings.rb +33 -0
  69. data/lib/fastpix_api_sdk/models/components/playbacksettings_accesspolicy.rb +20 -0
  70. data/lib/fastpix_api_sdk/models/components/security.rb +37 -0
  71. data/lib/fastpix_api_sdk/models/components/segment_1.rb +37 -0
  72. data/lib/fastpix_api_sdk/models/components/segment_2.rb +37 -0
  73. data/lib/fastpix_api_sdk/models/components/segment_union.rb +28 -0
  74. data/lib/fastpix_api_sdk/models/components/simulcastdeleteresponse.rb +33 -0
  75. data/lib/fastpix_api_sdk/models/components/simulcastrequest.rb +37 -0
  76. data/lib/fastpix_api_sdk/models/components/simulcastresponse.rb +37 -0
  77. data/lib/fastpix_api_sdk/models/components/simulcastresponse_data.rb +49 -0
  78. data/lib/fastpix_api_sdk/models/components/simulcastresponse_metadata.rb +28 -0
  79. data/lib/fastpix_api_sdk/models/components/simulcastupdaterequest.rb +37 -0
  80. data/lib/fastpix_api_sdk/models/components/simulcastupdaterequest_metadata.rb +28 -0
  81. data/lib/fastpix_api_sdk/models/components/simulcastupdateresponse.rb +37 -0
  82. data/lib/fastpix_api_sdk/models/components/simulcastupdateresponse_data.rb +49 -0
  83. data/lib/fastpix_api_sdk/models/components/simulcastupdateresponse_metadata.rb +28 -0
  84. data/lib/fastpix_api_sdk/models/components/sourceresolution.rb +24 -0
  85. data/lib/fastpix_api_sdk/models/components/subtitle.rb +45 -0
  86. data/lib/fastpix_api_sdk/models/components/subtitle_metadata.rb +29 -0
  87. data/lib/fastpix_api_sdk/models/components/subtitleinput.rb +47 -0
  88. data/lib/fastpix_api_sdk/models/components/subtitleinput_languagecode.rb +76 -0
  89. data/lib/fastpix_api_sdk/models/components/summary.rb +40 -0
  90. data/lib/fastpix_api_sdk/models/components/track.rb +53 -0
  91. data/lib/fastpix_api_sdk/models/components/videoinput.rb +68 -0
  92. data/lib/fastpix_api_sdk/models/components/watermarkinput.rb +53 -0
  93. data/lib/fastpix_api_sdk/models/components/watermarkinput_type.rb +19 -0
  94. data/lib/fastpix_api_sdk/models/components/xalign.rb +21 -0
  95. data/lib/fastpix_api_sdk/models/components/yalign.rb +21 -0
  96. data/lib/fastpix_api_sdk/models/components.rb +98 -0
  97. data/lib/fastpix_api_sdk/models/errors/apierror.rb +38 -0
  98. data/lib/fastpix_api_sdk/models/errors/badrequest_error.rb +37 -0
  99. data/lib/fastpix_api_sdk/models/errors/badrequest_error_error.rb +42 -0
  100. data/lib/fastpix_api_sdk/models/errors/field.rb +37 -0
  101. data/lib/fastpix_api_sdk/models/errors/forbidden_error.rb +37 -0
  102. data/lib/fastpix_api_sdk/models/errors/forbidden_error_error.rb +42 -0
  103. data/lib/fastpix_api_sdk/models/errors/invalidpermission_error.rb +37 -0
  104. data/lib/fastpix_api_sdk/models/errors/invalidpermission_error_error.rb +42 -0
  105. data/lib/fastpix_api_sdk/models/errors/medianotfound_error.rb +37 -0
  106. data/lib/fastpix_api_sdk/models/errors/medianotfound_error_error.rb +42 -0
  107. data/lib/fastpix_api_sdk/models/errors/mediaorplaybacknotfound_error.rb +37 -0
  108. data/lib/fastpix_api_sdk/models/errors/mediaorplaybacknotfound_error_error.rb +42 -0
  109. data/lib/fastpix_api_sdk/models/errors/notfounderror.rb +37 -0
  110. data/lib/fastpix_api_sdk/models/errors/notfounderror_error.rb +42 -0
  111. data/lib/fastpix_api_sdk/models/errors/notfounderrorplaybackid.rb +37 -0
  112. data/lib/fastpix_api_sdk/models/errors/notfounderrorplaybackid_error.rb +42 -0
  113. data/lib/fastpix_api_sdk/models/errors/notfounderrorsimulcast.rb +37 -0
  114. data/lib/fastpix_api_sdk/models/errors/notfounderrorsimulcast_error.rb +42 -0
  115. data/lib/fastpix_api_sdk/models/errors/simulcastunavailable_error.rb +38 -0
  116. data/lib/fastpix_api_sdk/models/errors/simulcastunavailable_error_error.rb +45 -0
  117. data/lib/fastpix_api_sdk/models/errors/unauthorized_error.rb +37 -0
  118. data/lib/fastpix_api_sdk/models/errors/unauthorized_error_error.rb +42 -0
  119. data/lib/fastpix_api_sdk/models/errors/validationerrorresponse.rb +37 -0
  120. data/lib/fastpix_api_sdk/models/errors/validationerrorresponse_error.rb +41 -0
  121. data/lib/fastpix_api_sdk/models/errors.rb +35 -0
  122. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_accesspolicy.rb +21 -0
  123. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_accessrestrictions.rb +37 -0
  124. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_domains.rb +48 -0
  125. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_domains_defaultpolicy.rb +23 -0
  126. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_request.rb +37 -0
  127. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_requestbody.rb +37 -0
  128. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_response.rb +45 -0
  129. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_responsebody.rb +37 -0
  130. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_useragents.rb +48 -0
  131. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_useragents_defaultpolicy.rb +23 -0
  132. data/lib/fastpix_api_sdk/models/operations/create_media_response.rb +45 -0
  133. data/lib/fastpix_api_sdk/models/operations/create_media_responsebody.rb +37 -0
  134. data/lib/fastpix_api_sdk/models/operations/create_new_stream_response.rb +45 -0
  135. data/lib/fastpix_api_sdk/models/operations/create_playbackid_of_stream_request.rb +37 -0
  136. data/lib/fastpix_api_sdk/models/operations/create_playbackid_of_stream_response.rb +45 -0
  137. data/lib/fastpix_api_sdk/models/operations/create_simulcast_of_stream_request.rb +37 -0
  138. data/lib/fastpix_api_sdk/models/operations/create_simulcast_of_stream_response.rb +45 -0
  139. data/lib/fastpix_api_sdk/models/operations/data.rb +33 -0
  140. data/lib/fastpix_api_sdk/models/operations/delete_live_stream_request.rb +33 -0
  141. data/lib/fastpix_api_sdk/models/operations/delete_live_stream_response.rb +45 -0
  142. data/lib/fastpix_api_sdk/models/operations/delete_media_playback_id_request.rb +37 -0
  143. data/lib/fastpix_api_sdk/models/operations/delete_media_playback_id_response.rb +45 -0
  144. data/lib/fastpix_api_sdk/models/operations/delete_media_playback_id_responsebody.rb +33 -0
  145. data/lib/fastpix_api_sdk/models/operations/delete_media_request.rb +33 -0
  146. data/lib/fastpix_api_sdk/models/operations/delete_media_response.rb +45 -0
  147. data/lib/fastpix_api_sdk/models/operations/delete_media_responsebody.rb +33 -0
  148. data/lib/fastpix_api_sdk/models/operations/delete_playbackid_of_stream_request.rb +37 -0
  149. data/lib/fastpix_api_sdk/models/operations/delete_playbackid_of_stream_response.rb +45 -0
  150. data/lib/fastpix_api_sdk/models/operations/delete_simulcast_of_stream_request.rb +37 -0
  151. data/lib/fastpix_api_sdk/models/operations/delete_simulcast_of_stream_response.rb +45 -0
  152. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_accesspolicy.rb +20 -0
  153. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_accessrestrictions.rb +37 -0
  154. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_domains.rb +48 -0
  155. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_domains_defaultpolicy.rb +23 -0
  156. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_metadata.rb +28 -0
  157. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_request.rb +37 -0
  158. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_response.rb +45 -0
  159. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_responsebody.rb +37 -0
  160. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_useragents.rb +48 -0
  161. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_useragents_defaultpolicy.rb +23 -0
  162. data/lib/fastpix_api_sdk/models/operations/get_all_streams_orderby.rb +20 -0
  163. data/lib/fastpix_api_sdk/models/operations/get_all_streams_request.rb +41 -0
  164. data/lib/fastpix_api_sdk/models/operations/get_all_streams_response.rb +45 -0
  165. data/lib/fastpix_api_sdk/models/operations/get_live_stream_by_id_request.rb +33 -0
  166. data/lib/fastpix_api_sdk/models/operations/get_live_stream_by_id_response.rb +45 -0
  167. data/lib/fastpix_api_sdk/models/operations/get_live_stream_playback_id_request.rb +37 -0
  168. data/lib/fastpix_api_sdk/models/operations/get_live_stream_playback_id_response.rb +45 -0
  169. data/lib/fastpix_api_sdk/models/operations/get_media_request.rb +33 -0
  170. data/lib/fastpix_api_sdk/models/operations/get_media_response.rb +45 -0
  171. data/lib/fastpix_api_sdk/models/operations/get_media_responsebody.rb +37 -0
  172. data/lib/fastpix_api_sdk/models/operations/get_specific_simulcast_of_stream_request.rb +37 -0
  173. data/lib/fastpix_api_sdk/models/operations/get_specific_simulcast_of_stream_response.rb +45 -0
  174. data/lib/fastpix_api_sdk/models/operations/input.rb +28 -0
  175. data/lib/fastpix_api_sdk/models/operations/languagecode.rb +26 -0
  176. data/lib/fastpix_api_sdk/models/operations/list_media_orderby.rb +20 -0
  177. data/lib/fastpix_api_sdk/models/operations/list_media_request.rb +41 -0
  178. data/lib/fastpix_api_sdk/models/operations/list_media_response.rb +45 -0
  179. data/lib/fastpix_api_sdk/models/operations/list_media_responsebody.rb +41 -0
  180. data/lib/fastpix_api_sdk/models/operations/maxresolution.rb +25 -0
  181. data/lib/fastpix_api_sdk/models/operations/moderation.rb +34 -0
  182. data/lib/fastpix_api_sdk/models/operations/mp4support.rb +22 -0
  183. data/lib/fastpix_api_sdk/models/operations/push_media_settings.rb +95 -0
  184. data/lib/fastpix_api_sdk/models/operations/retrievemediainputinfo_request.rb +33 -0
  185. data/lib/fastpix_api_sdk/models/operations/retrievemediainputinfo_response.rb +45 -0
  186. data/lib/fastpix_api_sdk/models/operations/retrievemediainputinfo_responsebody.rb +37 -0
  187. data/lib/fastpix_api_sdk/models/operations/subtitles.rb +43 -0
  188. data/lib/fastpix_api_sdk/models/operations/subtitles_metadata.rb +28 -0
  189. data/lib/fastpix_api_sdk/models/operations/summary.rb +40 -0
  190. data/lib/fastpix_api_sdk/models/operations/type.rb +22 -0
  191. data/lib/fastpix_api_sdk/models/operations/update_live_stream_request.rb +37 -0
  192. data/lib/fastpix_api_sdk/models/operations/update_live_stream_response.rb +45 -0
  193. data/lib/fastpix_api_sdk/models/operations/update_specific_simulcast_of_stream_request.rb +41 -0
  194. data/lib/fastpix_api_sdk/models/operations/update_specific_simulcast_of_stream_response.rb +45 -0
  195. data/lib/fastpix_api_sdk/models/operations/updated_media_metadata.rb +28 -0
  196. data/lib/fastpix_api_sdk/models/operations/updated_media_request.rb +37 -0
  197. data/lib/fastpix_api_sdk/models/operations/updated_media_requestbody.rb +33 -0
  198. data/lib/fastpix_api_sdk/models/operations/updated_media_response.rb +45 -0
  199. data/lib/fastpix_api_sdk/models/operations/updated_media_responsebody.rb +37 -0
  200. data/lib/fastpix_api_sdk/models/operations.rb +89 -0
  201. data/lib/fastpix_api_sdk/playback.rb +941 -0
  202. data/lib/fastpix_api_sdk/sdk.rb +103 -0
  203. data/lib/fastpix_api_sdk/sdk_hooks/hooks.rb +96 -0
  204. data/lib/fastpix_api_sdk/sdk_hooks/types.rb +157 -0
  205. data/lib/fastpix_api_sdk/sdkconfiguration.rb +77 -0
  206. data/lib/fastpix_api_sdk/simulcast_stream.rb +767 -0
  207. data/lib/fastpix_api_sdk/start_live_stream.rb +208 -0
  208. data/lib/fastpix_api_sdk/utils/forms.rb +210 -0
  209. data/lib/fastpix_api_sdk/utils/headers.rb +79 -0
  210. data/lib/fastpix_api_sdk/utils/query_params.rb +133 -0
  211. data/lib/fastpix_api_sdk/utils/request_bodies.rb +62 -0
  212. data/lib/fastpix_api_sdk/utils/retries.rb +95 -0
  213. data/lib/fastpix_api_sdk/utils/security.rb +133 -0
  214. data/lib/fastpix_api_sdk/utils/url.rb +102 -0
  215. data/lib/fastpix_api_sdk/utils/utils.rb +186 -0
  216. data/lib/fastpixapi.rb +29 -0
  217. metadata +442 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2eff6b879ab56e0014de49b73002d24bc42fea9d708940b3675c0abeff0fcf94
4
+ data.tar.gz: 8539b2b948cf503c1743b2772fba64f9b9b05e580cd81ff2f2a80ef0df574912
5
+ SHA512:
6
+ metadata.gz: e73482d1529a0a0b33fe5239e084c12634d0f57b8a1401cb76209e722255899e49807372432fc13c7fe6c51644f2eb7c802f2fdb9a14c1c122ddf8a2e586fdc1
7
+ data.tar.gz: '0076889ee5f69e540d4ee427210b6097f76733a9892c5f69732c9693fea4cf4049c1fd258581cd04c75af3a634c45a25a084106e20e55c9b9174b13022ce92b6'
@@ -0,0 +1,210 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ module Crystalline
7
+ extend T::Sig
8
+ module MetadataFields
9
+ extend T::Sig
10
+
11
+ class Field
12
+ attr_accessor :name, :type, :metadata
13
+
14
+ def initialize(name, type, metadata)
15
+ @name = name
16
+ @type = type
17
+ @metadata = metadata
18
+ end
19
+ end
20
+
21
+ module ClassMethods
22
+ extend T::Sig
23
+
24
+ def fields
25
+ @__fields__ = [] if @__fields__.nil?
26
+
27
+ @__fields__
28
+ end
29
+
30
+ def field(field_name, type, metadata = {})
31
+ attr_accessor field_name
32
+
33
+ fields << Field.new(field_name, type, metadata)
34
+ end
35
+
36
+ def field_augmented?
37
+ true
38
+ end
39
+
40
+ def unmarshal_single(field_type, value, format_metadata = nil)
41
+ decoder = format_metadata.fetch(:decoder, nil)
42
+
43
+ if field_type.instance_of?(Class) && field_type.include?(::Crystalline::MetadataFields)
44
+ return field_type.from_dict(value)
45
+ elsif field_type.to_s == 'Date'
46
+ return Date.parse(value)
47
+ elsif field_type.to_s == 'DateTime'
48
+ return DateTime.parse(value)
49
+ elsif field_type.to_s == 'Object'
50
+ # rubocop:disable Lint/SuppressedException
51
+ begin
52
+ value = JSON.parse(value)
53
+ rescue TypeError, JSON::ParserError
54
+ end
55
+ # rubocop:enable Lint/SuppressedException
56
+ return value
57
+ elsif field_type.to_s == 'Float'
58
+ return value.to_f
59
+
60
+ end
61
+ if decoder.nil?
62
+ value
63
+ else
64
+ decoder.call(value)
65
+ end
66
+ end
67
+
68
+ sig { params(json_obj: T.any(String, T::Hash[Symbol, String])).returns(Object) }
69
+ def from_json(json_obj)
70
+ begin
71
+ d = JSON.parse(json_obj)
72
+ rescue TypeError, JSON::ParserError
73
+ d = json_obj
74
+ end
75
+ from_dict(d)
76
+ end
77
+
78
+ sig { params(d: T::Hash[Symbol, String]).returns(Object) }
79
+ def from_dict(d)
80
+ to_build = {}
81
+
82
+ fields.each do |field|
83
+ key = field.name
84
+ format_metadata = field.metadata.fetch(:format_json, {})
85
+ lookup = format_metadata.fetch(:letter_case, nil).call
86
+ value = d[lookup]
87
+ field_type = field.type
88
+ if T.nilable? field_type
89
+ if value == 'null'
90
+ to_build[key] = nil
91
+ next
92
+ end
93
+ field_type = T.nilable_of(field_type)
94
+ end
95
+
96
+ # If field is not nilable, and the value is not in the dict, raise a KeyError
97
+ raise KeyError, "key #{lookup} not found in hash" if value.nil? && !T.nilable?(field.type)
98
+ # If field is nilable, and the value is not in the dict, just move to the next field
99
+ next if value.nil?
100
+
101
+ if T.arr? field_type
102
+ inner_type = T.arr_of(field_type)
103
+ unmarshalled_array = value.map { |f| unmarshal_single(inner_type, f, format_metadata) }
104
+ to_build[key] = unmarshalled_array
105
+ elsif T.hash? field_type
106
+ val_type = T.hash_of(field_type)
107
+
108
+ # rubocop:disable Style/HashTransformValues
109
+ unmarshalled_hash = value.map { |k, v| [k, unmarshal_single(val_type, v, format_metadata)] }.to_h
110
+ # rubocop:enable Style/HashTransformValues
111
+ to_build[key] = unmarshalled_hash
112
+ elsif T.union? field_type
113
+ discriminator = field.metadata.fetch(:discriminator, nil)
114
+ if !discriminator.nil?
115
+ type_to_deserialize = value.fetch(discriminator)
116
+ type_to_deserialize = T.get_union_types(field_type).find { |t| t.name.split('::').last == type_to_deserialize }
117
+ unmarshalled_val = Crystalline.unmarshal_json(value, type_to_deserialize)
118
+ to_build[key] = unmarshalled_val
119
+ else
120
+ union_types = T.get_union_types(field_type)
121
+ union_types = union_types.sort_by { |klass| Crystalline.non_nilable_attr_count(klass) }
122
+
123
+ union_types.each do |union_type|
124
+ begin
125
+ unmarshalled_val = Crystalline.unmarshal_json(value, union_type)
126
+ to_build[key] = unmarshalled_val
127
+ rescue TypeError
128
+ next
129
+ rescue NoMethodError
130
+ next
131
+ rescue KeyError
132
+ next
133
+ end
134
+ break
135
+ end
136
+ end
137
+ elsif field_type.instance_of?(Class) && field_type.include?(::Crystalline::MetadataFields)
138
+ unmarshalled = Crystalline.unmarshal_json(value, field_type)
139
+ to_build[key] = unmarshalled
140
+ else
141
+ final_value = unmarshal_single(field_type, value, format_metadata)
142
+ to_build[key] = final_value
143
+ end
144
+ end
145
+
146
+ new(**to_build)
147
+ end
148
+ end
149
+
150
+ def initialize
151
+ instance = allocate
152
+ fields.each { |mod| instance.singleton_class.include(mod) }
153
+ instance.send(:initialize)
154
+ end
155
+
156
+ def self.included(base)
157
+ base.extend(ClassMethods)
158
+ end
159
+
160
+ def fields
161
+ self.class.fields
162
+ end
163
+
164
+ def field(field_name)
165
+ fields.each do |f|
166
+ return f if f.name == field_name
167
+ end
168
+ end
169
+
170
+ def marshal_single(field)
171
+ if field.class.include? ::Crystalline::MetadataFields
172
+ field.to_dict
173
+ else
174
+ ::Crystalline.val_to_string(field, primitives: false)
175
+ end
176
+ end
177
+
178
+ def to_dict
179
+ result = {}
180
+ fields.sort_by(&:name).each do |field|
181
+ format_json_meta = field.metadata[:format_json]
182
+ required = !format_json_meta.nil? && format_json_meta.include?(:required)
183
+ if !format_json_meta.nil? && format_json_meta.include?(:letter_case)
184
+ key = format_json_meta[:letter_case].call(field.name)
185
+ else
186
+ key = field.name
187
+ end
188
+
189
+ f = send(field.name)
190
+ next if f.nil? && !required
191
+ result[key] = nil if f.nil? && required
192
+
193
+ if f.is_a? Array
194
+ result[key] = f.map { |o| marshal_single(o) }
195
+ elsif f.is_a? Hash
196
+ result[key] = f.map { |k, v| [k, marshal_single(v)] }
197
+ else
198
+ result[key] = marshal_single(f)
199
+ end
200
+ end
201
+ result
202
+ end
203
+
204
+ def to_json(*args)
205
+ JSON.generate(to_dict, *args)
206
+ end
207
+ end
208
+
209
+
210
+ end
@@ -0,0 +1,78 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ module T
7
+ def self.arr?(t)
8
+ if t.respond_to? :underlying_class
9
+ return t.underlying_class == ::Array
10
+ end
11
+ false
12
+ end
13
+
14
+ def self.arr_of(t)
15
+ get_raw_type(t.type)
16
+ end
17
+
18
+ def self.hash?(t)
19
+ if t.respond_to? :underlying_class
20
+ return t.underlying_class == ::Hash
21
+ end
22
+ false
23
+ end
24
+
25
+ def self.hash_of(t)
26
+ get_raw_type(t.values)
27
+ end
28
+
29
+ def self.nilable?(t)
30
+ # in sorbet all `T.any` types provide unwrap_nilable for some reason
31
+ # So, in order to make this check more robust, we check if the type responds to the `types` method, and if so, whether
32
+ # one of those types is NilClass. For non-nilable unions, `types` will return a valid list that does not include NilClass
33
+ return false unless t.respond_to?(:unwrap_nilable)
34
+ return true unless t.respond_to?(:types)
35
+ t.types.map { |tt| simplify_type(tt) }.include?(NilClass)
36
+ end
37
+
38
+ def self.nilable_of(t)
39
+
40
+ if nilable t
41
+ return simplify_type t.unwrap_nilable
42
+ end
43
+ nil
44
+ end
45
+
46
+ def self.simplifiable?(t)
47
+ return t.is_a? T::Types::Simple
48
+ end
49
+
50
+ def self.simplify_type(t)
51
+ if t.is_a? T::Types::Simple
52
+ return t.raw_type
53
+ end
54
+ t
55
+ end
56
+
57
+
58
+ def self.union?(t)
59
+ return false unless t.respond_to? :types
60
+ return false if t.types.any? { |tt| get_raw_type(tt) == TrueClass }
61
+ return false if t.types.length == 2 && t.types.any? { |tt| get_raw_type(tt) == NilClass }
62
+ t.types.length > 1
63
+ end
64
+
65
+ def self.get_union_types(t)
66
+ t.types.map { |tt| get_raw_type(tt) }
67
+ end
68
+
69
+
70
+ def self.get_raw_type(t)
71
+ if t.respond_to? :raw_type
72
+ return t.raw_type
73
+ elsif t.respond_to? :raw_a
74
+ return T::Boolean if t.raw_a in [TrueClass, FalseClass]
75
+ end
76
+ t
77
+ end
78
+ end
@@ -0,0 +1,95 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'sorbet-runtime'
7
+
8
+ module Crystalline
9
+ extend T::Sig
10
+
11
+ sig { params(complex: Object).returns(Object) }
12
+ def self.to_dict(complex)
13
+ if complex.is_a? Array
14
+ complex.map { |v| Crystalline.to_dict(v) }
15
+ elsif complex.is_a? Hash
16
+ complex.transform_values { |v| Crystalline.to_dict(v) }
17
+ elsif complex.respond_to?(:class) && complex.class.include?(::Crystalline::MetadataFields)
18
+ complex.to_dict
19
+ else
20
+ val_to_string complex, primitives: false
21
+ end
22
+ end
23
+
24
+ def self.to_json(complex)
25
+ JSON.dump(to_dict(complex))
26
+ end
27
+
28
+ sig { params(data: Object, type: Object).returns(Object) }
29
+ def self.unmarshal_json(data, type)
30
+ if T.simplifiable? type
31
+ type = T.simplify_type type
32
+ end
33
+ if type.instance_of?(Class) && type.include?(::Crystalline::MetadataFields)
34
+ type.from_dict(data)
35
+ elsif T.union? type
36
+ union_types = T.get_union_types(type)
37
+ union_types = union_types.sort_by { |klass| Crystalline.non_nilable_attr_count(klass) }
38
+
39
+ union_types.each do |union_type|
40
+ unmarshalled_val = Crystalline.unmarshal_json(data, union_type)
41
+ return unmarshalled_val
42
+ rescue TypeError
43
+ next
44
+ rescue NoMethodError
45
+ next
46
+ rescue KeyError
47
+ next
48
+ end
49
+ elsif T.arr? type
50
+ data.map { |v| Crystalline.unmarshal_json(v, T.arr_of(type)) }
51
+ elsif T.hash? type
52
+ data.transform_values { |v| Crystalline.unmarshal_json(v, T.hash_of(type)) }
53
+ elsif T.nilable?(type) && data == 'null'
54
+ nil
55
+ else
56
+ data
57
+ end
58
+ end
59
+
60
+ sig { params(val: Object, primitives: T::Boolean).returns(Object) }
61
+ def self.val_to_string(val, primitives: true)
62
+ if val.is_a? T::Enum
63
+ val.serialize
64
+ elsif val.is_a? DateTime
65
+ val.strftime('%Y-%m-%dT%H:%M:%S.%NZ')
66
+ elsif val.nil?
67
+ nil
68
+ elsif primitives
69
+ val.to_s
70
+ else
71
+ val
72
+ end
73
+ end
74
+
75
+ sig { params(klass: T.any(Class, T::Types::TypedArray, T::Types::TypedHash)).returns(Integer) }
76
+ def self.non_nilable_attr_count(klass)
77
+ # somewhat sane sort ordering for Union deserialization.
78
+ # All Crystalline objects return the number of non-nilable fields
79
+ # All non-string primitives return 2
80
+ # All arrays and hashes return 1
81
+ # Strings return 0 (since any data can deserialize to a string, it should be our last attempt)
82
+ if klass.respond_to? :fields
83
+ return -1 * klass.fields.count do |field|
84
+ !T.nilable? field.type
85
+ end
86
+ else
87
+ if klass == String
88
+ return 0
89
+ elsif klass.is_a?(T::Types::TypedArray) || klass.is_a?(T::Types::TypedHash)
90
+ return 1
91
+ end
92
+ return 2
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,12 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ module Crystalline
7
+ autoload :MetadataFields, 'crystalline/metadata_fields'
8
+ end
9
+
10
+
11
+ require_relative 'crystalline/utils'
12
+ require_relative 'crystalline/t'