123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302openPpx_yojson_conv_lib.Yojson_conv.PrimitivesopenAwsoopen!Importtypes3_event_notification_event_name=[`Object_createdof[`Star|`Put|`Post|`Copy|`Complete_multipart_upload]|`Object_removedof[`Star|`Delete|`Delete_marker_created]|`Reduced_redundancy_lost_object|`Unknownofstring][@@derivingyojson_of]typeinet_addr=stringletyojson_of_inet_addr(a:inet_addr)=`Stringatypetime_string=stringletyojson_of_time_string(t:time_string)=`Stringttyperequest_parameters_entity={source_ip_address:inet_addr}[@@derivingyojson_of]typeresponse_elements_entity={x_amz_id_2:string;x_amz_request_id:string}[@@derivingyojson_of]typeuser_identity_entity={principal_id:string}[@@derivingyojson_of]types3_bucket_entity={name:string;owner_identity:user_identity_entity;arn:string}[@@derivingyojson_of]types3_object_entity={key:string;size:int64;e_tag:string;version_id:stringoption;sequencer:string}[@@derivingyojson_of]types3_entity={configuration_id:string;bucket:s3_bucket_entity;object_:s3_object_entity;s3_schema_version:string}[@@derivingyojson_of]types3_event_notification_record={aws_region:Region.t;event_name:s3_event_notification_event_name;event_source:string;event_time:time_stringoption;event_version:string;request_parameters:request_parameters_entity;response_elements:response_elements_entity;s3:s3_entity;user_identity:user_identity_entity}[@@derivingyojson_of]types3_event_notification={records:s3_event_notification_recordlist}[@@derivingyojson_of]typet=s3_event_notification[@@derivingyojson_of]letrequest_parameters_entity_fields=["sourceIPAddress"]letresponse_elements_entity_fields=["x-amz-id-2";"x-amz-request-id"]letuser_identity_entity_fields=["principalId"]lets3_bucket_entity_fields=["name";"ownerIdentity";"arn"]lets3_object_entity_fields=["key";"size";"eTag";"versionId";"sequencer"]lets3_entity_fields=["configurationId";"bucket";"object";"s3SchemaVersion"]lets3_event_notification_record_fields=["awsRegion";"eventName";"eventSource";"eventTime";"eventVersion";"requestParameters";"responseElements";"s3";"userIdentity"];;lets3_event_notification_fields=["Records"]typeshape=[`Request_parameters_entity|`Response_elements_entity|`User_identity_entity|`S3_bucket_entity|`S3_object_entity|`S3_entity|`S3_event_notification_record|`S3_event_notification]moduleExn=structexceptionUnexpected_fieldsofshape*stringlistmoduleJ=structletfindxf=matchxwith|`Assoclst->List.find_exnlst~f:(fun(k,_v)->String.equalkf)|>snd|_->failwithf"Expected object for find %s"f();;letget_stringv=Yojson.Safe.Util.to_stringvletget_listv=Yojson.Safe.Util.to_listvletget_int64v=matchvwith|`Inti->Int64.of_inti|`Intlits->Int64.of_strings|_->failwith"get_int64 failed";;letfieldxfld=tryfindxfldwith|Not_found->failwithf"No field named %s"fld();;letopt_fieldxfld=Option.try_with(fun()->findxfld)letstring_fieldxfld=fieldxfld|>funv->tryget_stringvwith|Yojson.Safe.Util.Type_error(msg,_)->failwithf"Field %s is not a string: %s"fldmsg();;letopt_string_fieldxfld=matchopt_fieldxfldwith|Somev->(trySome(get_stringv)with|Yojson.Safe.Util.Type_error(msg,_)->failwithf"Field %s is not a string: %s"fldmsg())|None->None;;endletcheck_fields~shapefields=function|`Assocvalues->(matchList.filtervalues~f:(fun(k,_)->not(List.memfieldsk~equal:String.equal))with|[]->()|unexpected->raise(Unexpected_fields(shape,List.mapunexpected~f:fst)))|_->failwith"Expected object value";;letparse_s3_event_notification_record_event_name=function|"ObjectCreated:*"->`Object_created`Star|"ObjectCreated:Put"->`Object_created`Put|"ObjectCreated:Post"->`Object_created`Post|"ObjectCreated:Copy"->`Object_created`Copy|"ObjectCreated:CompleteMultipartUpload"->`Object_created`Complete_multipart_upload|"ObjectRemoved:*"->`Object_removed`Star|"ObjectRemoved:Delete"->`Object_removed`Delete|"ObjectRemoved:DeleteMarkerCreated"->`Object_removed`Delete_marker_created|"ReducedRedundancyLostObject"->`Reduced_redundancy_lost_object|unknown->`Unknownunknown;;letparse_request_parameters_entity(x:Yojson.Safe.t)=check_fields~shape:`Request_parameters_entityrequest_parameters_entity_fieldsx|>fun()->J.string_fieldx"sourceIPAddress"|>funsource_ip_address:request_parameters_entity->{source_ip_address};;letparse_response_elements_entityx=check_fields~shape:`Response_elements_entityresponse_elements_entity_fieldsx|>fun()->J.string_fieldx"x-amz-id-2"|>funx_amz_id_2->J.string_fieldx"x-amz-request-id"|>funx_amz_request_id:response_elements_entity->{x_amz_id_2;x_amz_request_id};;letparse_user_identity_entityx=check_fields~shape:`User_identity_entityuser_identity_entity_fieldsx|>fun()->J.string_fieldx"principalId"|>funprincipal_id:user_identity_entity->{principal_id};;letparse_s3_bucket_entityx=check_fields~shape:`S3_bucket_entitys3_bucket_entity_fieldsx|>fun()->J.string_fieldx"name"|>funname->J.fieldx"ownerIdentity"|>parse_user_identity_entity|>funowner_identity->J.string_fieldx"arn"|>funarn:s3_bucket_entity->{name;owner_identity;arn};;letparse_s3_object_entityx=check_fields~shape:`S3_object_entitys3_object_entity_fieldsx|>fun()->J.string_fieldx"key"|>funkey->J.fieldx"size"|>J.get_int64|>funsize->J.string_fieldx"eTag"|>fune_tag->J.opt_string_fieldx"versionId"|>funversion_id->J.string_fieldx"sequencer"|>funsequencer:s3_object_entity->{key;size;e_tag;version_id;sequencer};;letparse_s3_entityx=check_fields~shape:`S3_entitys3_entity_fieldsx|>fun()->J.string_fieldx"configurationId"|>funconfiguration_id->J.fieldx"bucket"|>parse_s3_bucket_entity|>funbucket->J.fieldx"object"|>parse_s3_object_entity|>funobject_->J.string_fieldx"s3SchemaVersion"|>funs3_schema_version:s3_entity->{configuration_id;bucket;object_;s3_schema_version};;letparse_s3_event_notification_recordx=check_fields~shape:`S3_event_notification_records3_event_notification_record_fieldsx|>fun()->J.string_fieldx"awsRegion"|>Region.of_string|>funaws_region->J.string_fieldx"eventName"|>parse_s3_event_notification_record_event_name|>funevent_name->J.string_fieldx"eventSource"|>funevent_source->J.opt_string_fieldx"eventTime"|>funevent_time->J.string_fieldx"eventVersion"|>funevent_version->J.fieldx"requestParameters"|>parse_request_parameters_entity|>funrequest_parameters->J.fieldx"responseElements"|>parse_response_elements_entity|>funresponse_elements->J.fieldx"s3"|>parse_s3_entity|>funs3->J.fieldx"userIdentity"|>parse_user_identity_entity|>funuser_identity:s3_event_notification_record->{aws_region;event_name;event_source;event_time;event_version;request_parameters;response_elements;s3;user_identity};;letparse_s3_event_notificationx=check_fields~shape:`S3_event_notifications3_event_notification_fieldsx|>fun()->J.fieldx"Records"|>J.get_list|>List.map~f:parse_s3_event_notification_record|>funrecords:s3_event_notification->{records};;endletof_jsonx=try`Ok(Exn.parse_s3_event_notificationx:t)with|Exn.Unexpected_fields(name,fields)->`Unexpected_fields(name,fields)|Yojson.Safe.Util.Type_error(msg,_)->`Parse_errormsg;;letof_stringx=tryYojson.Safe.from_stringx|>of_jsonwith|Yojson.Json_errormsg->`Parse_errormsg;;