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.
- checksums.yaml +7 -0
- data/lib/crystalline/metadata_fields.rb +210 -0
- data/lib/crystalline/t.rb +78 -0
- data/lib/crystalline/utils.rb +95 -0
- data/lib/crystalline.rb +12 -0
- data/lib/fastpix_api_sdk/input_video.rb +454 -0
- data/lib/fastpix_api_sdk/manage_live_stream.rb +717 -0
- data/lib/fastpix_api_sdk/manage_videos.rb +960 -0
- data/lib/fastpix_api_sdk/models/components/audioinput.rb +41 -0
- data/lib/fastpix_api_sdk/models/components/audioinput_type.rb +19 -0
- data/lib/fastpix_api_sdk/models/components/createlivestreamrequest.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/createlivestreamrequest_maxresolution.rb +21 -0
- data/lib/fastpix_api_sdk/models/components/createlivestreamrequest_metadata.rb +28 -0
- data/lib/fastpix_api_sdk/models/components/createmediarequest.rb +89 -0
- data/lib/fastpix_api_sdk/models/components/createmediarequest_accesspolicy.rb +22 -0
- data/lib/fastpix_api_sdk/models/components/createmediarequest_accessrestrictions.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/createmediarequest_domains.rb +48 -0
- data/lib/fastpix_api_sdk/models/components/createmediarequest_domains_defaultpolicy.rb +23 -0
- data/lib/fastpix_api_sdk/models/components/createmediarequest_languagecode.rb +26 -0
- data/lib/fastpix_api_sdk/models/components/createmediarequest_maxresolution.rb +25 -0
- data/lib/fastpix_api_sdk/models/components/createmediarequest_metadata.rb +29 -0
- data/lib/fastpix_api_sdk/models/components/createmediarequest_mp4support.rb +22 -0
- data/lib/fastpix_api_sdk/models/components/createmediarequest_type.rb +22 -0
- data/lib/fastpix_api_sdk/models/components/createmediarequest_useragents.rb +48 -0
- data/lib/fastpix_api_sdk/models/components/createmediarequest_useragents_defaultpolicy.rb +23 -0
- data/lib/fastpix_api_sdk/models/components/createmediaresponse.rb +62 -0
- data/lib/fastpix_api_sdk/models/components/createmediaresponse_maxresolution.rb +24 -0
- data/lib/fastpix_api_sdk/models/components/createmediaresponse_metadata.rb +28 -0
- data/lib/fastpix_api_sdk/models/components/directupload.rb +58 -0
- data/lib/fastpix_api_sdk/models/components/directuploadresponse.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/directuploadresponse_metadata.rb +28 -0
- data/lib/fastpix_api_sdk/models/components/getcreatelivestreamresponsedto.rb +85 -0
- data/lib/fastpix_api_sdk/models/components/getcreatelivestreamresponsedto_metadata.rb +28 -0
- data/lib/fastpix_api_sdk/models/components/getcreatelivestreamresponsedto_srtplaybackresponse.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/getstreamsresponse.rb +41 -0
- data/lib/fastpix_api_sdk/models/components/imposetrack.rb +49 -0
- data/lib/fastpix_api_sdk/models/components/input.rb +28 -0
- data/lib/fastpix_api_sdk/models/components/inputmediasettings.rb +45 -0
- data/lib/fastpix_api_sdk/models/components/livestreamdeleteresponse.rb +33 -0
- data/lib/fastpix_api_sdk/models/components/livestreamgetresponse.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/livestreamresponsedto.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/media.rb +93 -0
- data/lib/fastpix_api_sdk/models/components/media_maxresolution.rb +24 -0
- data/lib/fastpix_api_sdk/models/components/media_metadata.rb +28 -0
- data/lib/fastpix_api_sdk/models/components/media_mp4support.rb +22 -0
- data/lib/fastpix_api_sdk/models/components/mediapolicy.rb +20 -0
- data/lib/fastpix_api_sdk/models/components/moderation.rb +34 -0
- data/lib/fastpix_api_sdk/models/components/pagination.rb +41 -0
- data/lib/fastpix_api_sdk/models/components/patchlivestreamrequest.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/patchlivestreamrequest_metadata.rb +28 -0
- data/lib/fastpix_api_sdk/models/components/patchresponsedata.rb +85 -0
- data/lib/fastpix_api_sdk/models/components/patchresponsedata_metadata.rb +28 -0
- data/lib/fastpix_api_sdk/models/components/patchresponsedata_srtplaybackresponse.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/patchresponsedto.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/placement.rb +45 -0
- data/lib/fastpix_api_sdk/models/components/playbackid.rb +41 -0
- data/lib/fastpix_api_sdk/models/components/playbackid_accesspolicy.rb +21 -0
- data/lib/fastpix_api_sdk/models/components/playbackid_accessrestrictions.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/playbackid_domains.rb +41 -0
- data/lib/fastpix_api_sdk/models/components/playbackid_domains_defaultpolicy.rb +20 -0
- data/lib/fastpix_api_sdk/models/components/playbackid_useragents.rb +41 -0
- data/lib/fastpix_api_sdk/models/components/playbackid_useragents_defaultpolicy.rb +20 -0
- data/lib/fastpix_api_sdk/models/components/playbackidrequest.rb +33 -0
- data/lib/fastpix_api_sdk/models/components/playbackidrequest_accesspolicy.rb +20 -0
- data/lib/fastpix_api_sdk/models/components/playbackidresponse.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/playbackidresponse_data.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/playbackids.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/playbacksettings.rb +33 -0
- data/lib/fastpix_api_sdk/models/components/playbacksettings_accesspolicy.rb +20 -0
- data/lib/fastpix_api_sdk/models/components/security.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/segment_1.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/segment_2.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/segment_union.rb +28 -0
- data/lib/fastpix_api_sdk/models/components/simulcastdeleteresponse.rb +33 -0
- data/lib/fastpix_api_sdk/models/components/simulcastrequest.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/simulcastresponse.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/simulcastresponse_data.rb +49 -0
- data/lib/fastpix_api_sdk/models/components/simulcastresponse_metadata.rb +28 -0
- data/lib/fastpix_api_sdk/models/components/simulcastupdaterequest.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/simulcastupdaterequest_metadata.rb +28 -0
- data/lib/fastpix_api_sdk/models/components/simulcastupdateresponse.rb +37 -0
- data/lib/fastpix_api_sdk/models/components/simulcastupdateresponse_data.rb +49 -0
- data/lib/fastpix_api_sdk/models/components/simulcastupdateresponse_metadata.rb +28 -0
- data/lib/fastpix_api_sdk/models/components/sourceresolution.rb +24 -0
- data/lib/fastpix_api_sdk/models/components/subtitle.rb +45 -0
- data/lib/fastpix_api_sdk/models/components/subtitle_metadata.rb +29 -0
- data/lib/fastpix_api_sdk/models/components/subtitleinput.rb +47 -0
- data/lib/fastpix_api_sdk/models/components/subtitleinput_languagecode.rb +76 -0
- data/lib/fastpix_api_sdk/models/components/summary.rb +40 -0
- data/lib/fastpix_api_sdk/models/components/track.rb +53 -0
- data/lib/fastpix_api_sdk/models/components/videoinput.rb +68 -0
- data/lib/fastpix_api_sdk/models/components/watermarkinput.rb +53 -0
- data/lib/fastpix_api_sdk/models/components/watermarkinput_type.rb +19 -0
- data/lib/fastpix_api_sdk/models/components/xalign.rb +21 -0
- data/lib/fastpix_api_sdk/models/components/yalign.rb +21 -0
- data/lib/fastpix_api_sdk/models/components.rb +98 -0
- data/lib/fastpix_api_sdk/models/errors/apierror.rb +38 -0
- data/lib/fastpix_api_sdk/models/errors/badrequest_error.rb +37 -0
- data/lib/fastpix_api_sdk/models/errors/badrequest_error_error.rb +42 -0
- data/lib/fastpix_api_sdk/models/errors/field.rb +37 -0
- data/lib/fastpix_api_sdk/models/errors/forbidden_error.rb +37 -0
- data/lib/fastpix_api_sdk/models/errors/forbidden_error_error.rb +42 -0
- data/lib/fastpix_api_sdk/models/errors/invalidpermission_error.rb +37 -0
- data/lib/fastpix_api_sdk/models/errors/invalidpermission_error_error.rb +42 -0
- data/lib/fastpix_api_sdk/models/errors/medianotfound_error.rb +37 -0
- data/lib/fastpix_api_sdk/models/errors/medianotfound_error_error.rb +42 -0
- data/lib/fastpix_api_sdk/models/errors/mediaorplaybacknotfound_error.rb +37 -0
- data/lib/fastpix_api_sdk/models/errors/mediaorplaybacknotfound_error_error.rb +42 -0
- data/lib/fastpix_api_sdk/models/errors/notfounderror.rb +37 -0
- data/lib/fastpix_api_sdk/models/errors/notfounderror_error.rb +42 -0
- data/lib/fastpix_api_sdk/models/errors/notfounderrorplaybackid.rb +37 -0
- data/lib/fastpix_api_sdk/models/errors/notfounderrorplaybackid_error.rb +42 -0
- data/lib/fastpix_api_sdk/models/errors/notfounderrorsimulcast.rb +37 -0
- data/lib/fastpix_api_sdk/models/errors/notfounderrorsimulcast_error.rb +42 -0
- data/lib/fastpix_api_sdk/models/errors/simulcastunavailable_error.rb +38 -0
- data/lib/fastpix_api_sdk/models/errors/simulcastunavailable_error_error.rb +45 -0
- data/lib/fastpix_api_sdk/models/errors/unauthorized_error.rb +37 -0
- data/lib/fastpix_api_sdk/models/errors/unauthorized_error_error.rb +42 -0
- data/lib/fastpix_api_sdk/models/errors/validationerrorresponse.rb +37 -0
- data/lib/fastpix_api_sdk/models/errors/validationerrorresponse_error.rb +41 -0
- data/lib/fastpix_api_sdk/models/errors.rb +35 -0
- data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_accesspolicy.rb +21 -0
- data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_accessrestrictions.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_domains.rb +48 -0
- data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_domains_defaultpolicy.rb +23 -0
- data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_request.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_requestbody.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_responsebody.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_useragents.rb +48 -0
- data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_useragents_defaultpolicy.rb +23 -0
- data/lib/fastpix_api_sdk/models/operations/create_media_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/create_media_responsebody.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/create_new_stream_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/create_playbackid_of_stream_request.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/create_playbackid_of_stream_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/create_simulcast_of_stream_request.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/create_simulcast_of_stream_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/data.rb +33 -0
- data/lib/fastpix_api_sdk/models/operations/delete_live_stream_request.rb +33 -0
- data/lib/fastpix_api_sdk/models/operations/delete_live_stream_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/delete_media_playback_id_request.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/delete_media_playback_id_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/delete_media_playback_id_responsebody.rb +33 -0
- data/lib/fastpix_api_sdk/models/operations/delete_media_request.rb +33 -0
- data/lib/fastpix_api_sdk/models/operations/delete_media_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/delete_media_responsebody.rb +33 -0
- data/lib/fastpix_api_sdk/models/operations/delete_playbackid_of_stream_request.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/delete_playbackid_of_stream_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/delete_simulcast_of_stream_request.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/delete_simulcast_of_stream_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_accesspolicy.rb +20 -0
- data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_accessrestrictions.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_domains.rb +48 -0
- data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_domains_defaultpolicy.rb +23 -0
- data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_metadata.rb +28 -0
- data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_request.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_responsebody.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_useragents.rb +48 -0
- data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_useragents_defaultpolicy.rb +23 -0
- data/lib/fastpix_api_sdk/models/operations/get_all_streams_orderby.rb +20 -0
- data/lib/fastpix_api_sdk/models/operations/get_all_streams_request.rb +41 -0
- data/lib/fastpix_api_sdk/models/operations/get_all_streams_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/get_live_stream_by_id_request.rb +33 -0
- data/lib/fastpix_api_sdk/models/operations/get_live_stream_by_id_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/get_live_stream_playback_id_request.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/get_live_stream_playback_id_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/get_media_request.rb +33 -0
- data/lib/fastpix_api_sdk/models/operations/get_media_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/get_media_responsebody.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/get_specific_simulcast_of_stream_request.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/get_specific_simulcast_of_stream_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/input.rb +28 -0
- data/lib/fastpix_api_sdk/models/operations/languagecode.rb +26 -0
- data/lib/fastpix_api_sdk/models/operations/list_media_orderby.rb +20 -0
- data/lib/fastpix_api_sdk/models/operations/list_media_request.rb +41 -0
- data/lib/fastpix_api_sdk/models/operations/list_media_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/list_media_responsebody.rb +41 -0
- data/lib/fastpix_api_sdk/models/operations/maxresolution.rb +25 -0
- data/lib/fastpix_api_sdk/models/operations/moderation.rb +34 -0
- data/lib/fastpix_api_sdk/models/operations/mp4support.rb +22 -0
- data/lib/fastpix_api_sdk/models/operations/push_media_settings.rb +95 -0
- data/lib/fastpix_api_sdk/models/operations/retrievemediainputinfo_request.rb +33 -0
- data/lib/fastpix_api_sdk/models/operations/retrievemediainputinfo_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/retrievemediainputinfo_responsebody.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/subtitles.rb +43 -0
- data/lib/fastpix_api_sdk/models/operations/subtitles_metadata.rb +28 -0
- data/lib/fastpix_api_sdk/models/operations/summary.rb +40 -0
- data/lib/fastpix_api_sdk/models/operations/type.rb +22 -0
- data/lib/fastpix_api_sdk/models/operations/update_live_stream_request.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/update_live_stream_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/update_specific_simulcast_of_stream_request.rb +41 -0
- data/lib/fastpix_api_sdk/models/operations/update_specific_simulcast_of_stream_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/updated_media_metadata.rb +28 -0
- data/lib/fastpix_api_sdk/models/operations/updated_media_request.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations/updated_media_requestbody.rb +33 -0
- data/lib/fastpix_api_sdk/models/operations/updated_media_response.rb +45 -0
- data/lib/fastpix_api_sdk/models/operations/updated_media_responsebody.rb +37 -0
- data/lib/fastpix_api_sdk/models/operations.rb +89 -0
- data/lib/fastpix_api_sdk/playback.rb +941 -0
- data/lib/fastpix_api_sdk/sdk.rb +103 -0
- data/lib/fastpix_api_sdk/sdk_hooks/hooks.rb +96 -0
- data/lib/fastpix_api_sdk/sdk_hooks/types.rb +157 -0
- data/lib/fastpix_api_sdk/sdkconfiguration.rb +77 -0
- data/lib/fastpix_api_sdk/simulcast_stream.rb +767 -0
- data/lib/fastpix_api_sdk/start_live_stream.rb +208 -0
- data/lib/fastpix_api_sdk/utils/forms.rb +210 -0
- data/lib/fastpix_api_sdk/utils/headers.rb +79 -0
- data/lib/fastpix_api_sdk/utils/query_params.rb +133 -0
- data/lib/fastpix_api_sdk/utils/request_bodies.rb +62 -0
- data/lib/fastpix_api_sdk/utils/retries.rb +95 -0
- data/lib/fastpix_api_sdk/utils/security.rb +133 -0
- data/lib/fastpix_api_sdk/utils/url.rb +102 -0
- data/lib/fastpix_api_sdk/utils/utils.rb +186 -0
- data/lib/fastpixapi.rb +29 -0
- 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
|
data/lib/crystalline.rb
ADDED
@@ -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'
|