Skip to main content

src/oadr3@schema.erl

-module(oadr3@schema).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oadr3/schema.gleam").
-export([client_id_decoder/0, anon_97535fea_decoder/0, client_id_encode/1, anon_97535fea_encode/1, object_types_decoder/0, anon_85c77f13_decoder/0, object_types_encode/1, anon_85c77f13_encode/1, resource_name_decoder/0, values_map_decoder/0, date_time_decoder/0, duration_decoder/0, interval_period_decoder/0, interval_decoder/0, anon_818bb683_decoder/0, resource_name_encode/1, values_map_encode/1, date_time_encode/1, duration_encode/1, interval_period_encode/1, interval_encode/1, anon_818bb683_encode/1, anon_25ddbf1f_decoder/0, anon_25ddbf1f_encode/1, target_decoder/0, program_request_decoder/0, object_id_decoder/0, object_metadata_decoder/0, program_decoder/0, target_encode/1, program_request_encode/1, object_id_encode/1, object_metadata_encode/1, program_encode/1, client_credential_response_decoder/0, client_credential_response_encode/1, ven_name_decoder/0, bl_ven_request_decoder/0, ven_decoder/0, ven_name_encode/1, bl_ven_request_encode/1, ven_encode/1, auth_server_info_decoder/0, auth_server_info_encode/1, notifier_operations_topics_decoder/0, notifier_topics_response_decoder/0, notifier_operations_topics_encode/1, notifier_topics_response_encode/1, mqtt_notifier_binding_object_decoder/0, mqtt_notifier_binding_object_encode/1, client_name_decoder/0, subscription_request_decoder/0, subscription_decoder/0, client_name_encode/1, subscription_request_encode/1, subscription_encode/1, units_decoder/0, reading_type_decoder/0, report_descriptor_decoder/0, event_payload_descriptor_decoder/0, event_request_decoder/0, units_encode/1, reading_type_encode/1, report_descriptor_encode/1, event_payload_descriptor_encode/1, event_request_encode/1, mqtt_notifier_authentication_anonymous_decoder/0, mqtt_notifier_authentication_anonymous_encode/1, notifiers_response_decoder/0, notifiers_response_encode/1, notification_decoder/0, notification_encode/1, client_credential_request_decoder/0, client_credential_request_encode/1, resource_request_decoder/0, resource_request_encode/1, point_decoder/0, point_encode/1, report_payload_descriptor_decoder/0, report_request_decoder/0, report_decoder/0, report_payload_descriptor_encode/1, report_request_encode/1, report_encode/1, mqtt_notifier_authentication_oauth2_bearer_token_decoder/0, mqtt_notifier_authentication_oauth2_bearer_token_encode/1, auth_error_decoder/0, auth_error_encode/1, problem_decoder/0, problem_encode/1, bl_resource_request_decoder/0, bl_resource_request_encode/1, event_decoder/0, event_encode/1, ven_request_decoder/0, ven_request_encode/1, resource_decoder/0, resource_encode/1, ven_ven_request_decoder/0, ven_ven_request_encode/1, mqtt_notifier_authentication_certificate_decoder/0, mqtt_notifier_authentication_certificate_encode/1, ven_resource_request_decoder/0, ven_resource_request_encode/1]).
-export_type([ven_resource_request/0, mqtt_notifier_authentication_certificate/0, ven_ven_request/0, object_metadata/0, interval_period/0, notifier_operations_topics/0, program_request/0, bl_resource_request/0, problem/0, report_payload_descriptor/0, report_request/0, auth_error/0, mqtt_notifier_authentication_oauth2_bearer_token/0, bl_ven_request/0, report_descriptor/0, point/0, client_credential_request/0, notification/0, subscription_request/0, values_map/0, notifiers_response/0, mqtt_notifier_authentication_anonymous/0, event_payload_descriptor/0, event_request/0, mqtt_notifier_binding_object/0, notifier_topics_response/0, interval/0, auth_server_info/0, client_credential_response/0, anon25ddbf1f/0, anon818bb683/0, anon85c77f13/0, anon97535fea/0]).

-type ven_resource_request() :: {ven_resource_request,
        gleam@option:option(list(values_map())),
        binary(),
        binary(),
        binary()}.

-type mqtt_notifier_authentication_certificate() :: {mqtt_notifier_authentication_certificate,
        binary(),
        binary(),
        binary(),
        binary()}.

-type ven_ven_request() :: {ven_ven_request,
        gleam@option:option(list(values_map())),
        binary(),
        binary()}.

-type object_metadata() :: {object_metadata,
        binary(),
        binary(),
        binary(),
        binary()}.

-type interval_period() :: {interval_period,
        gleam@option:option(binary()),
        gleam@option:option(binary()),
        gleam@option:option(binary())}.

-type notifier_operations_topics() :: {notifier_operations_topics,
        gleam@option:option(binary()),
        gleam@option:option(binary()),
        binary(),
        binary()}.

-type program_request() :: {program_request,
        gleam@option:option(list(values_map())),
        gleam@option:option(interval_period()),
        gleam@option:option(list(oadr3@utils:any_())),
        gleam@option:option(list(anon25ddbf1f())),
        binary(),
        gleam@option:option(list(binary()))}.

-type bl_resource_request() :: {bl_resource_request,
        gleam@option:option(list(values_map())),
        binary(),
        binary(),
        binary(),
        gleam@option:option(list(binary())),
        binary()}.

-type problem() :: {problem,
        gleam@option:option(binary()),
        gleam@option:option(binary()),
        gleam@option:option(integer()),
        gleam@option:option(binary()),
        gleam@option:option(binary())}.

-type report_payload_descriptor() :: {report_payload_descriptor,
        gleam@option:option(float()),
        gleam@option:option(integer()),
        binary(),
        binary(),
        gleam@option:option(binary()),
        gleam@option:option(binary())}.

-type report_request() :: {report_request,
        binary(),
        binary(),
        gleam@option:option(list(report_payload_descriptor())),
        gleam@option:option(binary()),
        list(anon818bb683())}.

-type auth_error() :: {auth_error,
        binary(),
        gleam@option:option(binary()),
        gleam@option:option(binary())}.

-type mqtt_notifier_authentication_oauth2_bearer_token() :: {mqtt_notifier_authentication_oauth2_bearer_token,
        binary(),
        binary()}.

-type bl_ven_request() :: {bl_ven_request,
        gleam@option:option(list(values_map())),
        binary(),
        binary(),
        gleam@option:option(list(binary())),
        binary()}.

-type report_descriptor() :: {report_descriptor,
        gleam@option:option(boolean()),
        gleam@option:option(integer()),
        gleam@option:option(boolean()),
        gleam@option:option(integer()),
        binary(),
        gleam@option:option(binary()),
        gleam@option:option(integer()),
        gleam@option:option(binary()),
        gleam@option:option(integer()),
        gleam@option:option(list(binary())),
        gleam@option:option(binary())}.

-type point() :: {point, float(), float()}.

-type client_credential_request() :: {client_credential_request,
        binary(),
        binary(),
        binary(),
        gleam@option:option(binary())}.

-type notification() :: {notification,
        nil,
        binary(),
        binary(),
        gleam@option:option(list(binary()))}.

-type subscription_request() :: {subscription_request,
        binary(),
        list(anon85c77f13()),
        gleam@option:option(binary()),
        gleam@option:option(list(binary()))}.

-type values_map() :: {values_map, binary(), list(oadr3@utils:any_())}.

-type notifiers_response() :: {notifiers_response,
        gleam@option:option(mqtt_notifier_binding_object()),
        boolean()}.

-type mqtt_notifier_authentication_anonymous() :: {mqtt_notifier_authentication_anonymous,
        binary()}.

-type event_payload_descriptor() :: {event_payload_descriptor,
        gleam@option:option(binary()),
        binary(),
        binary(),
        gleam@option:option(binary())}.

-type event_request() :: {event_request,
        gleam@option:option(binary()),
        gleam@option:option(binary()),
        gleam@option:option(interval_period()),
        gleam@option:option(list(interval())),
        gleam@option:option(list(event_payload_descriptor())),
        gleam@option:option(integer()),
        binary(),
        gleam@option:option(list(report_descriptor())),
        gleam@option:option(list(binary()))}.

-type mqtt_notifier_binding_object() :: {mqtt_notifier_binding_object,
        list(binary()),
        oadr3@utils:any_(),
        binary()}.

-type notifier_topics_response() :: {notifier_topics_response,
        notifier_operations_topics()}.

-type interval() :: {interval,
        integer(),
        gleam@option:option(interval_period()),
        list(values_map())}.

-type auth_server_info() :: {auth_server_info, binary()}.

-type client_credential_response() :: {client_credential_response,
        binary(),
        gleam@option:option(integer()),
        gleam@option:option(binary()),
        gleam@option:option(binary()),
        binary()}.

-type anon25ddbf1f() :: {anon25ddbf1f, binary()}.

-type anon818bb683() :: {anon818bb683,
        gleam@option:option(interval_period()),
        list(interval()),
        binary()}.

-type anon85c77f13() :: {anon85c77f13,
        gleam@option:option(binary()),
        binary(),
        list(binary()),
        list(binary())}.

-type anon97535fea() :: {anon97535fea, binary()}.

-file("src/oadr3/schema.gleam", 1216).
-spec client_id_decoder() -> gleam@dynamic@decode:decoder(binary()).
client_id_decoder() ->
    {decoder, fun gleam@dynamic@decode:decode_string/1}.

-file("src/oadr3/schema.gleam", 331).
-spec anon_97535fea_decoder() -> gleam@dynamic@decode:decoder(anon97535fea()).
anon_97535fea_decoder() ->
    gleam@dynamic@decode:field(
        <<"clientID"/utf8>>,
        client_id_decoder(),
        fun(Client_id) ->
            gleam@dynamic@decode:success({anon97535fea, Client_id})
        end
    ).

-file("src/oadr3/schema.gleam", 1220).
-spec client_id_encode(binary()) -> gleam@json:json().
client_id_encode(Data) ->
    gleam@json:string(Data).

-file("src/oadr3/schema.gleam", 336).
-spec anon_97535fea_encode(anon97535fea()) -> gleam@json:json().
anon_97535fea_encode(Data) ->
    oadr3@utils:object(
        [{<<"clientID"/utf8>>, client_id_encode(erlang:element(2, Data))}]
    ).

-file("src/oadr3/schema.gleam", 1014).
-spec object_types_decoder() -> gleam@dynamic@decode:decoder(binary()).
object_types_decoder() ->
    {decoder, fun gleam@dynamic@decode:decode_string/1}.

-file("src/oadr3/schema.gleam", 340).
-spec anon_85c77f13_decoder() -> gleam@dynamic@decode:decoder(anon85c77f13()).
anon_85c77f13_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"bearerToken"/utf8>>,
        none,
        gleam@dynamic@decode:optional(
            {decoder, fun gleam@dynamic@decode:decode_string/1}
        ),
        fun(Bearer_token) ->
            gleam@dynamic@decode:field(
                <<"callbackUrl"/utf8>>,
                {decoder, fun gleam@dynamic@decode:decode_string/1},
                fun(Callback_url) ->
                    gleam@dynamic@decode:field(
                        <<"objects"/utf8>>,
                        gleam@dynamic@decode:list(object_types_decoder()),
                        fun(Objects) ->
                            gleam@dynamic@decode:field(
                                <<"operations"/utf8>>,
                                gleam@dynamic@decode:list(
                                    {decoder,
                                        fun gleam@dynamic@decode:decode_string/1}
                                ),
                                fun(Operations) ->
                                    gleam@dynamic@decode:success(
                                        {anon85c77f13,
                                            Bearer_token,
                                            Callback_url,
                                            Objects,
                                            Operations}
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1018).
-spec object_types_encode(binary()) -> gleam@json:json().
object_types_encode(Data) ->
    gleam@json:string(Data).

-file("src/oadr3/schema.gleam", 357).
-spec anon_85c77f13_encode(anon85c77f13()) -> gleam@json:json().
anon_85c77f13_encode(Data) ->
    oadr3@utils:object(
        [{<<"bearerToken"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun gleam@json:string/1
                )},
            {<<"callbackUrl"/utf8>>, gleam@json:string(erlang:element(3, Data))},
            {<<"objects"/utf8>>,
                gleam@json:array(
                    erlang:element(4, Data),
                    fun object_types_encode/1
                )},
            {<<"operations"/utf8>>,
                gleam@json:array(
                    erlang:element(5, Data),
                    fun gleam@json:string/1
                )}]
    ).

-file("src/oadr3/schema.gleam", 1022).
-spec resource_name_decoder() -> gleam@dynamic@decode:decoder(binary()).
resource_name_decoder() ->
    {decoder, fun gleam@dynamic@decode:decode_string/1}.

-file("src/oadr3/schema.gleam", 697).
-spec values_map_decoder() -> gleam@dynamic@decode:decoder(values_map()).
values_map_decoder() ->
    gleam@dynamic@decode:field(
        <<"type"/utf8>>,
        {decoder, fun gleam@dynamic@decode:decode_string/1},
        fun(Type_) ->
            gleam@dynamic@decode:field(
                <<"values"/utf8>>,
                gleam@dynamic@decode:list(oadr3@utils:any_decoder()),
                fun(Values) ->
                    gleam@dynamic@decode:success({values_map, Type_, Values})
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1208).
-spec date_time_decoder() -> gleam@dynamic@decode:decoder(binary()).
date_time_decoder() ->
    {decoder, fun gleam@dynamic@decode:decode_string/1}.

-file("src/oadr3/schema.gleam", 1224).
-spec duration_decoder() -> gleam@dynamic@decode:decoder(binary()).
duration_decoder() ->
    {decoder, fun gleam@dynamic@decode:decode_string/1}.

-file("src/oadr3/schema.gleam", 1329).
-spec interval_period_decoder() -> gleam@dynamic@decode:decoder(interval_period()).
interval_period_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"duration"/utf8>>,
        none,
        gleam@dynamic@decode:optional(duration_decoder()),
        fun(Duration) ->
            gleam@dynamic@decode:optional_field(
                <<"randomizeStart"/utf8>>,
                none,
                gleam@dynamic@decode:optional(duration_decoder()),
                fun(Randomize_start) ->
                    gleam@dynamic@decode:optional_field(
                        <<"start"/utf8>>,
                        none,
                        gleam@dynamic@decode:optional(date_time_decoder()),
                        fun(Start) ->
                            gleam@dynamic@decode:success(
                                {interval_period,
                                    Duration,
                                    Randomize_start,
                                    Start}
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 475).
-spec interval_decoder() -> gleam@dynamic@decode:decoder(interval()).
interval_decoder() ->
    gleam@dynamic@decode:field(
        <<"id"/utf8>>,
        {decoder, fun gleam@dynamic@decode:decode_int/1},
        fun(Id) ->
            gleam@dynamic@decode:optional_field(
                <<"intervalPeriod"/utf8>>,
                none,
                gleam@dynamic@decode:optional(interval_period_decoder()),
                fun(Interval_period) ->
                    gleam@dynamic@decode:field(
                        <<"payloads"/utf8>>,
                        gleam@dynamic@decode:list(values_map_decoder()),
                        fun(Payloads) ->
                            gleam@dynamic@decode:success(
                                {interval, Id, Interval_period, Payloads}
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 366).
-spec anon_818bb683_decoder() -> gleam@dynamic@decode:decoder(anon818bb683()).
anon_818bb683_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"intervalPeriod"/utf8>>,
        none,
        gleam@dynamic@decode:optional(interval_period_decoder()),
        fun(Interval_period) ->
            gleam@dynamic@decode:field(
                <<"intervals"/utf8>>,
                gleam@dynamic@decode:list(interval_decoder()),
                fun(Intervals) ->
                    gleam@dynamic@decode:field(
                        <<"resourceName"/utf8>>,
                        resource_name_decoder(),
                        fun(Resource_name) ->
                            gleam@dynamic@decode:success(
                                {anon818bb683,
                                    Interval_period,
                                    Intervals,
                                    Resource_name}
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1026).
-spec resource_name_encode(binary()) -> gleam@json:json().
resource_name_encode(Data) ->
    gleam@json:string(Data).

-file("src/oadr3/schema.gleam", 703).
-spec values_map_encode(values_map()) -> gleam@json:json().
values_map_encode(Data) ->
    oadr3@utils:object(
        [{<<"type"/utf8>>, gleam@json:string(erlang:element(2, Data))},
            {<<"values"/utf8>>,
                gleam@json:array(
                    erlang:element(3, Data),
                    fun oadr3@utils:any_to_json/1
                )}]
    ).

-file("src/oadr3/schema.gleam", 1212).
-spec date_time_encode(binary()) -> gleam@json:json().
date_time_encode(Data) ->
    gleam@json:string(Data).

-file("src/oadr3/schema.gleam", 1228).
-spec duration_encode(binary()) -> gleam@json:json().
duration_encode(Data) ->
    gleam@json:string(Data).

-file("src/oadr3/schema.gleam", 1352).
-spec interval_period_encode(interval_period()) -> gleam@json:json().
interval_period_encode(Data) ->
    oadr3@utils:object(
        [{<<"duration"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun duration_encode/1
                )},
            {<<"randomizeStart"/utf8>>,
                gleam@json:nullable(
                    erlang:element(3, Data),
                    fun duration_encode/1
                )},
            {<<"start"/utf8>>,
                gleam@json:nullable(
                    erlang:element(4, Data),
                    fun date_time_encode/1
                )}]
    ).

-file("src/oadr3/schema.gleam", 490).
-spec interval_encode(interval()) -> gleam@json:json().
interval_encode(Data) ->
    oadr3@utils:object(
        [{<<"id"/utf8>>, gleam@json:int(erlang:element(2, Data))},
            {<<"intervalPeriod"/utf8>>,
                gleam@json:nullable(
                    erlang:element(3, Data),
                    fun interval_period_encode/1
                )},
            {<<"payloads"/utf8>>,
                gleam@json:array(
                    erlang:element(4, Data),
                    fun values_map_encode/1
                )}]
    ).

-file("src/oadr3/schema.gleam", 381).
-spec anon_818bb683_encode(anon818bb683()) -> gleam@json:json().
anon_818bb683_encode(Data) ->
    oadr3@utils:object(
        [{<<"intervalPeriod"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun interval_period_encode/1
                )},
            {<<"intervals"/utf8>>,
                gleam@json:array(erlang:element(3, Data), fun interval_encode/1)},
            {<<"resourceName"/utf8>>,
                resource_name_encode(erlang:element(4, Data))}]
    ).

-file("src/oadr3/schema.gleam", 392).
-spec anon_25ddbf1f_decoder() -> gleam@dynamic@decode:decoder(anon25ddbf1f()).
anon_25ddbf1f_decoder() ->
    gleam@dynamic@decode:field(
        <<"URL"/utf8>>,
        {decoder, fun gleam@dynamic@decode:decode_string/1},
        fun(Url) -> gleam@dynamic@decode:success({anon25ddbf1f, Url}) end
    ).

-file("src/oadr3/schema.gleam", 397).
-spec anon_25ddbf1f_encode(anon25ddbf1f()) -> gleam@json:json().
anon_25ddbf1f_encode(Data) ->
    oadr3@utils:object(
        [{<<"URL"/utf8>>, gleam@json:string(erlang:element(2, Data))}]
    ).

-file("src/oadr3/schema.gleam", 979).
-spec target_decoder() -> gleam@dynamic@decode:decoder(binary()).
target_decoder() ->
    {decoder, fun gleam@dynamic@decode:decode_string/1}.

-file("src/oadr3/schema.gleam", 1240).
-spec program_request_decoder() -> gleam@dynamic@decode:decoder(program_request()).
program_request_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"attributes"/utf8>>,
        none,
        gleam@dynamic@decode:optional(
            gleam@dynamic@decode:list(values_map_decoder())
        ),
        fun(Attributes) ->
            gleam@dynamic@decode:optional_field(
                <<"intervalPeriod"/utf8>>,
                none,
                gleam@dynamic@decode:optional(interval_period_decoder()),
                fun(Interval_period) ->
                    gleam@dynamic@decode:optional_field(
                        <<"payloadDescriptors"/utf8>>,
                        none,
                        gleam@dynamic@decode:optional(
                            gleam@dynamic@decode:list(oadr3@utils:any_decoder())
                        ),
                        fun(Payload_descriptors) ->
                            gleam@dynamic@decode:optional_field(
                                <<"programDescriptions"/utf8>>,
                                none,
                                gleam@dynamic@decode:optional(
                                    gleam@dynamic@decode:list(
                                        anon_25ddbf1f_decoder()
                                    )
                                ),
                                fun(Program_descriptions) ->
                                    gleam@dynamic@decode:field(
                                        <<"programName"/utf8>>,
                                        {decoder,
                                            fun gleam@dynamic@decode:decode_string/1},
                                        fun(Program_name) ->
                                            gleam@dynamic@decode:optional_field(
                                                <<"targets"/utf8>>,
                                                none,
                                                gleam@dynamic@decode:optional(
                                                    gleam@dynamic@decode:list(
                                                        target_decoder()
                                                    )
                                                ),
                                                fun(Targets) ->
                                                    gleam@dynamic@decode:success(
                                                        {program_request,
                                                            Attributes,
                                                            Interval_period,
                                                            Payload_descriptors,
                                                            Program_descriptions,
                                                            Program_name,
                                                            Targets}
                                                    )
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 448).
-spec object_id_decoder() -> gleam@dynamic@decode:decoder(binary()).
object_id_decoder() ->
    {decoder, fun gleam@dynamic@decode:decode_string/1}.

-file("src/oadr3/schema.gleam", 1391).
-spec object_metadata_decoder() -> gleam@dynamic@decode:decoder(object_metadata()).
object_metadata_decoder() ->
    gleam@dynamic@decode:field(
        <<"createdDateTime"/utf8>>,
        date_time_decoder(),
        fun(Created_date_time) ->
            gleam@dynamic@decode:field(
                <<"id"/utf8>>,
                object_id_decoder(),
                fun(Id) ->
                    gleam@dynamic@decode:field(
                        <<"modificationDateTime"/utf8>>,
                        date_time_decoder(),
                        fun(Modification_date_time) ->
                            gleam@dynamic@decode:field(
                                <<"objectType"/utf8>>,
                                object_types_decoder(),
                                fun(Object_type) ->
                                    gleam@dynamic@decode:success(
                                        {object_metadata,
                                            Created_date_time,
                                            Id,
                                            Modification_date_time,
                                            Object_type}
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 401).
-spec program_decoder() -> gleam@dynamic@decode:decoder({object_metadata(),
    program_request()}).
program_decoder() ->
    gleam@dynamic@decode:then(
        object_metadata_decoder(),
        fun(E0) ->
            gleam@dynamic@decode:then(
                program_request_decoder(),
                fun(E1) -> gleam@dynamic@decode:success({E0, E1}) end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 983).
-spec target_encode(binary()) -> gleam@json:json().
target_encode(Data) ->
    gleam@json:string(Data).

-file("src/oadr3/schema.gleam", 1277).
-spec program_request_encode(program_request()) -> gleam@json:json().
program_request_encode(Data) ->
    oadr3@utils:object(
        [{<<"attributes"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun(_capture) ->
                        gleam@json:array(_capture, fun values_map_encode/1)
                    end
                )},
            {<<"intervalPeriod"/utf8>>,
                gleam@json:nullable(
                    erlang:element(3, Data),
                    fun interval_period_encode/1
                )},
            {<<"payloadDescriptors"/utf8>>,
                gleam@json:nullable(
                    erlang:element(4, Data),
                    fun(_capture@1) ->
                        gleam@json:array(
                            _capture@1,
                            fun oadr3@utils:any_to_json/1
                        )
                    end
                )},
            {<<"programDescriptions"/utf8>>,
                gleam@json:nullable(
                    erlang:element(5, Data),
                    fun(_capture@2) ->
                        gleam@json:array(_capture@2, fun anon_25ddbf1f_encode/1)
                    end
                )},
            {<<"programName"/utf8>>, gleam@json:string(erlang:element(6, Data))},
            {<<"targets"/utf8>>,
                gleam@json:nullable(
                    erlang:element(7, Data),
                    fun(_capture@3) ->
                        gleam@json:array(_capture@3, fun target_encode/1)
                    end
                )}]
    ).

-file("src/oadr3/schema.gleam", 452).
-spec object_id_encode(binary()) -> gleam@json:json().
object_id_encode(Data) ->
    gleam@json:string(Data).

-file("src/oadr3/schema.gleam", 1407).
-spec object_metadata_encode(object_metadata()) -> gleam@json:json().
object_metadata_encode(Data) ->
    oadr3@utils:object(
        [{<<"createdDateTime"/utf8>>, date_time_encode(erlang:element(2, Data))},
            {<<"id"/utf8>>, object_id_encode(erlang:element(3, Data))},
            {<<"modificationDateTime"/utf8>>,
                date_time_encode(erlang:element(4, Data))},
            {<<"objectType"/utf8>>,
                object_types_encode(erlang:element(5, Data))}]
    ).

-file("src/oadr3/schema.gleam", 407).
-spec program_encode({object_metadata(), program_request()}) -> gleam@json:json().
program_encode(Data) ->
    oadr3_utils_ffi:merge(
        [object_metadata_encode(erlang:element(1, Data)),
            program_request_encode(erlang:element(2, Data))]
    ).

-file("src/oadr3/schema.gleam", 411).
-spec client_credential_response_decoder() -> gleam@dynamic@decode:decoder(client_credential_response()).
client_credential_response_decoder() ->
    gleam@dynamic@decode:field(
        <<"access_token"/utf8>>,
        {decoder, fun gleam@dynamic@decode:decode_string/1},
        fun(Access_token) ->
            gleam@dynamic@decode:optional_field(
                <<"expires_in"/utf8>>,
                none,
                gleam@dynamic@decode:optional(
                    {decoder, fun gleam@dynamic@decode:decode_int/1}
                ),
                fun(Expires_in) ->
                    gleam@dynamic@decode:optional_field(
                        <<"refresh_token"/utf8>>,
                        none,
                        gleam@dynamic@decode:optional(
                            {decoder, fun gleam@dynamic@decode:decode_string/1}
                        ),
                        fun(Refresh_token) ->
                            gleam@dynamic@decode:optional_field(
                                <<"scope"/utf8>>,
                                none,
                                gleam@dynamic@decode:optional(
                                    {decoder,
                                        fun gleam@dynamic@decode:decode_string/1}
                                ),
                                fun(Scope) ->
                                    gleam@dynamic@decode:field(
                                        <<"token_type"/utf8>>,
                                        {decoder,
                                            fun gleam@dynamic@decode:decode_string/1},
                                        fun(Token_type) ->
                                            gleam@dynamic@decode:success(
                                                {client_credential_response,
                                                    Access_token,
                                                    Expires_in,
                                                    Refresh_token,
                                                    Scope,
                                                    Token_type}
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 438).
-spec client_credential_response_encode(client_credential_response()) -> gleam@json:json().
client_credential_response_encode(Data) ->
    oadr3@utils:object(
        [{<<"access_token"/utf8>>, gleam@json:string(erlang:element(2, Data))},
            {<<"expires_in"/utf8>>,
                gleam@json:nullable(
                    erlang:element(3, Data),
                    fun gleam@json:int/1
                )},
            {<<"refresh_token"/utf8>>,
                gleam@json:nullable(
                    erlang:element(4, Data),
                    fun gleam@json:string/1
                )},
            {<<"scope"/utf8>>,
                gleam@json:nullable(
                    erlang:element(5, Data),
                    fun gleam@json:string/1
                )},
            {<<"token_type"/utf8>>, gleam@json:string(erlang:element(6, Data))}]
    ).

-file("src/oadr3/schema.gleam", 1232).
-spec ven_name_decoder() -> gleam@dynamic@decode:decoder(binary()).
ven_name_decoder() ->
    {decoder, fun gleam@dynamic@decode:decode_string/1}.

-file("src/oadr3/schema.gleam", 925).
-spec bl_ven_request_decoder() -> gleam@dynamic@decode:decoder(bl_ven_request()).
bl_ven_request_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"attributes"/utf8>>,
        none,
        gleam@dynamic@decode:optional(
            gleam@dynamic@decode:list(values_map_decoder())
        ),
        fun(Attributes) ->
            gleam@dynamic@decode:field(
                <<"clientID"/utf8>>,
                client_id_decoder(),
                fun(Client_id) ->
                    gleam@dynamic@decode:field(
                        <<"objectType"/utf8>>,
                        {decoder, fun gleam@dynamic@decode:decode_string/1},
                        fun(Object_type) ->
                            gleam@dynamic@decode:optional_field(
                                <<"targets"/utf8>>,
                                none,
                                gleam@dynamic@decode:optional(
                                    gleam@dynamic@decode:list(target_decoder())
                                ),
                                fun(Targets) ->
                                    gleam@dynamic@decode:field(
                                        <<"venName"/utf8>>,
                                        ven_name_decoder(),
                                        fun(Ven_name) ->
                                            gleam@dynamic@decode:success(
                                                {bl_ven_request,
                                                    Attributes,
                                                    Client_id,
                                                    Object_type,
                                                    Targets,
                                                    Ven_name}
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 456).
-spec ven_decoder() -> gleam@dynamic@decode:decoder({object_metadata(),
    bl_ven_request()}).
ven_decoder() ->
    gleam@dynamic@decode:then(
        object_metadata_decoder(),
        fun(E0) ->
            gleam@dynamic@decode:then(
                bl_ven_request_decoder(),
                fun(E1) -> gleam@dynamic@decode:success({E0, E1}) end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1236).
-spec ven_name_encode(binary()) -> gleam@json:json().
ven_name_encode(Data) ->
    gleam@json:string(Data).

-file("src/oadr3/schema.gleam", 948).
-spec bl_ven_request_encode(bl_ven_request()) -> gleam@json:json().
bl_ven_request_encode(Data) ->
    oadr3@utils:object(
        [{<<"attributes"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun(_capture) ->
                        gleam@json:array(_capture, fun values_map_encode/1)
                    end
                )},
            {<<"clientID"/utf8>>, client_id_encode(erlang:element(3, Data))},
            {<<"objectType"/utf8>>, gleam@json:string(erlang:element(4, Data))},
            {<<"targets"/utf8>>,
                gleam@json:nullable(
                    erlang:element(5, Data),
                    fun(_capture@1) ->
                        gleam@json:array(_capture@1, fun target_encode/1)
                    end
                )},
            {<<"venName"/utf8>>, ven_name_encode(erlang:element(6, Data))}]
    ).

-file("src/oadr3/schema.gleam", 462).
-spec ven_encode({object_metadata(), bl_ven_request()}) -> gleam@json:json().
ven_encode(Data) ->
    oadr3_utils_ffi:merge(
        [object_metadata_encode(erlang:element(1, Data)),
            bl_ven_request_encode(erlang:element(2, Data))]
    ).

-file("src/oadr3/schema.gleam", 466).
-spec auth_server_info_decoder() -> gleam@dynamic@decode:decoder(auth_server_info()).
auth_server_info_decoder() ->
    gleam@dynamic@decode:field(
        <<"tokenURL"/utf8>>,
        {decoder, fun gleam@dynamic@decode:decode_string/1},
        fun(Token_url) ->
            gleam@dynamic@decode:success({auth_server_info, Token_url})
        end
    ).

-file("src/oadr3/schema.gleam", 471).
-spec auth_server_info_encode(auth_server_info()) -> gleam@json:json().
auth_server_info_encode(Data) ->
    oadr3@utils:object(
        [{<<"tokenURL"/utf8>>, gleam@json:string(erlang:element(2, Data))}]
    ).

-file("src/oadr3/schema.gleam", 1303).
-spec notifier_operations_topics_decoder() -> gleam@dynamic@decode:decoder(notifier_operations_topics()).
notifier_operations_topics_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"ALL"/utf8>>,
        none,
        gleam@dynamic@decode:optional(
            {decoder, fun gleam@dynamic@decode:decode_string/1}
        ),
        fun(All) ->
            gleam@dynamic@decode:optional_field(
                <<"CREATE"/utf8>>,
                none,
                gleam@dynamic@decode:optional(
                    {decoder, fun gleam@dynamic@decode:decode_string/1}
                ),
                fun(Create) ->
                    gleam@dynamic@decode:field(
                        <<"DELETE"/utf8>>,
                        {decoder, fun gleam@dynamic@decode:decode_string/1},
                        fun(Delete) ->
                            gleam@dynamic@decode:field(
                                <<"UPDATE"/utf8>>,
                                {decoder,
                                    fun gleam@dynamic@decode:decode_string/1},
                                fun(Update) ->
                                    gleam@dynamic@decode:success(
                                        {notifier_operations_topics,
                                            All,
                                            Create,
                                            Delete,
                                            Update}
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 501).
-spec notifier_topics_response_decoder() -> gleam@dynamic@decode:decoder(notifier_topics_response()).
notifier_topics_response_decoder() ->
    gleam@dynamic@decode:field(
        <<"topics"/utf8>>,
        notifier_operations_topics_decoder(),
        fun(Topics) ->
            gleam@dynamic@decode:success({notifier_topics_response, Topics})
        end
    ).

-file("src/oadr3/schema.gleam", 1320).
-spec notifier_operations_topics_encode(notifier_operations_topics()) -> gleam@json:json().
notifier_operations_topics_encode(Data) ->
    oadr3@utils:object(
        [{<<"ALL"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun gleam@json:string/1
                )},
            {<<"CREATE"/utf8>>,
                gleam@json:nullable(
                    erlang:element(3, Data),
                    fun gleam@json:string/1
                )},
            {<<"DELETE"/utf8>>, gleam@json:string(erlang:element(4, Data))},
            {<<"UPDATE"/utf8>>, gleam@json:string(erlang:element(5, Data))}]
    ).

-file("src/oadr3/schema.gleam", 506).
-spec notifier_topics_response_encode(notifier_topics_response()) -> gleam@json:json().
notifier_topics_response_encode(Data) ->
    oadr3@utils:object(
        [{<<"topics"/utf8>>,
                notifier_operations_topics_encode(erlang:element(2, Data))}]
    ).

-file("src/oadr3/schema.gleam", 510).
-spec mqtt_notifier_binding_object_decoder() -> gleam@dynamic@decode:decoder(mqtt_notifier_binding_object()).
mqtt_notifier_binding_object_decoder() ->
    gleam@dynamic@decode:field(
        <<"URIS"/utf8>>,
        gleam@dynamic@decode:list(
            {decoder, fun gleam@dynamic@decode:decode_string/1}
        ),
        fun(Uris) ->
            gleam@dynamic@decode:field(
                <<"authentication"/utf8>>,
                oadr3@utils:any_decoder(),
                fun(Authentication) ->
                    gleam@dynamic@decode:field(
                        <<"serialization"/utf8>>,
                        {decoder, fun gleam@dynamic@decode:decode_string/1},
                        fun(Serialization) ->
                            gleam@dynamic@decode:success(
                                {mqtt_notifier_binding_object,
                                    Uris,
                                    Authentication,
                                    Serialization}
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 521).
-spec mqtt_notifier_binding_object_encode(mqtt_notifier_binding_object()) -> gleam@json:json().
mqtt_notifier_binding_object_encode(Data) ->
    oadr3@utils:object(
        [{<<"URIS"/utf8>>,
                gleam@json:array(
                    erlang:element(2, Data),
                    fun gleam@json:string/1
                )},
            {<<"authentication"/utf8>>,
                oadr3@utils:any_to_json(erlang:element(3, Data))},
            {<<"serialization"/utf8>>,
                gleam@json:string(erlang:element(4, Data))}]
    ).

-file("src/oadr3/schema.gleam", 1161).
-spec client_name_decoder() -> gleam@dynamic@decode:decoder(binary()).
client_name_decoder() ->
    {decoder, fun gleam@dynamic@decode:decode_string/1}.

-file("src/oadr3/schema.gleam", 710).
-spec subscription_request_decoder() -> gleam@dynamic@decode:decoder(subscription_request()).
subscription_request_decoder() ->
    gleam@dynamic@decode:field(
        <<"clientName"/utf8>>,
        client_name_decoder(),
        fun(Client_name) ->
            gleam@dynamic@decode:field(
                <<"objectOperations"/utf8>>,
                gleam@dynamic@decode:list(anon_85c77f13_decoder()),
                fun(Object_operations) ->
                    gleam@dynamic@decode:optional_field(
                        <<"programID"/utf8>>,
                        none,
                        gleam@dynamic@decode:optional(object_id_decoder()),
                        fun(Program_id) ->
                            gleam@dynamic@decode:optional_field(
                                <<"targets"/utf8>>,
                                none,
                                gleam@dynamic@decode:optional(
                                    gleam@dynamic@decode:list(target_decoder())
                                ),
                                fun(Targets) ->
                                    gleam@dynamic@decode:success(
                                        {subscription_request,
                                            Client_name,
                                            Object_operations,
                                            Program_id,
                                            Targets}
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 529).
-spec subscription_decoder() -> gleam@dynamic@decode:decoder({object_metadata(),
    subscription_request(),
    anon97535fea()}).
subscription_decoder() ->
    gleam@dynamic@decode:then(
        object_metadata_decoder(),
        fun(E0) ->
            gleam@dynamic@decode:then(
                subscription_request_decoder(),
                fun(E1) ->
                    gleam@dynamic@decode:then(
                        anon_97535fea_decoder(),
                        fun(E2) ->
                            gleam@dynamic@decode:success({E0, E1, E2})
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1165).
-spec client_name_encode(binary()) -> gleam@json:json().
client_name_encode(Data) ->
    gleam@json:string(Data).

-file("src/oadr3/schema.gleam", 734).
-spec subscription_request_encode(subscription_request()) -> gleam@json:json().
subscription_request_encode(Data) ->
    oadr3@utils:object(
        [{<<"clientName"/utf8>>, client_name_encode(erlang:element(2, Data))},
            {<<"objectOperations"/utf8>>,
                gleam@json:array(
                    erlang:element(3, Data),
                    fun anon_85c77f13_encode/1
                )},
            {<<"programID"/utf8>>,
                gleam@json:nullable(
                    erlang:element(4, Data),
                    fun object_id_encode/1
                )},
            {<<"targets"/utf8>>,
                gleam@json:nullable(
                    erlang:element(5, Data),
                    fun(_capture) ->
                        gleam@json:array(_capture, fun target_encode/1)
                    end
                )}]
    ).

-file("src/oadr3/schema.gleam", 536).
-spec subscription_encode(
    {object_metadata(), subscription_request(), anon97535fea()}
) -> gleam@json:json().
subscription_encode(Data) ->
    oadr3_utils_ffi:merge(
        [object_metadata_encode(erlang:element(1, Data)),
            subscription_request_encode(erlang:element(2, Data)),
            anon_97535fea_encode(erlang:element(3, Data))]
    ).

-file("src/oadr3/schema.gleam", 672).
-spec units_decoder() -> gleam@dynamic@decode:decoder(binary()).
units_decoder() ->
    {decoder, fun gleam@dynamic@decode:decode_string/1}.

-file("src/oadr3/schema.gleam", 917).
-spec reading_type_decoder() -> gleam@dynamic@decode:decoder(binary()).
reading_type_decoder() ->
    {decoder, fun gleam@dynamic@decode:decode_string/1}.

-file("src/oadr3/schema.gleam", 819).
-spec report_descriptor_decoder() -> gleam@dynamic@decode:decoder(report_descriptor()).
report_descriptor_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"aggregate"/utf8>>,
        none,
        gleam@dynamic@decode:optional(
            {decoder, fun gleam@dynamic@decode:decode_bool/1}
        ),
        fun(Aggregate) ->
            gleam@dynamic@decode:optional_field(
                <<"frequency"/utf8>>,
                none,
                gleam@dynamic@decode:optional(
                    {decoder, fun gleam@dynamic@decode:decode_int/1}
                ),
                fun(Frequency) ->
                    gleam@dynamic@decode:optional_field(
                        <<"historical"/utf8>>,
                        none,
                        gleam@dynamic@decode:optional(
                            {decoder, fun gleam@dynamic@decode:decode_bool/1}
                        ),
                        fun(Historical) ->
                            gleam@dynamic@decode:optional_field(
                                <<"numIntervals"/utf8>>,
                                none,
                                gleam@dynamic@decode:optional(
                                    {decoder,
                                        fun gleam@dynamic@decode:decode_int/1}
                                ),
                                fun(Num_intervals) ->
                                    gleam@dynamic@decode:field(
                                        <<"payloadType"/utf8>>,
                                        {decoder,
                                            fun gleam@dynamic@decode:decode_string/1},
                                        fun(Payload_type) ->
                                            gleam@dynamic@decode:optional_field(
                                                <<"readingType"/utf8>>,
                                                none,
                                                gleam@dynamic@decode:optional(
                                                    reading_type_decoder()
                                                ),
                                                fun(Reading_type) ->
                                                    gleam@dynamic@decode:optional_field(
                                                        <<"repeat"/utf8>>,
                                                        none,
                                                        gleam@dynamic@decode:optional(
                                                            {decoder,
                                                                fun gleam@dynamic@decode:decode_int/1}
                                                        ),
                                                        fun(Repeat) ->
                                                            gleam@dynamic@decode:optional_field(
                                                                <<"reportIntervals"/utf8>>,
                                                                none,
                                                                gleam@dynamic@decode:optional(
                                                                    {decoder,
                                                                        fun gleam@dynamic@decode:decode_string/1}
                                                                ),
                                                                fun(
                                                                    Report_intervals
                                                                ) ->
                                                                    gleam@dynamic@decode:optional_field(
                                                                        <<"startInterval"/utf8>>,
                                                                        none,
                                                                        gleam@dynamic@decode:optional(
                                                                            {decoder,
                                                                                fun gleam@dynamic@decode:decode_int/1}
                                                                        ),
                                                                        fun(
                                                                            Start_interval
                                                                        ) ->
                                                                            gleam@dynamic@decode:optional_field(
                                                                                <<"targets"/utf8>>,
                                                                                none,
                                                                                gleam@dynamic@decode:optional(
                                                                                    gleam@dynamic@decode:list(
                                                                                        target_decoder(
                                                                                            
                                                                                        )
                                                                                    )
                                                                                ),
                                                                                fun(
                                                                                    Targets
                                                                                ) ->
                                                                                    gleam@dynamic@decode:optional_field(
                                                                                        <<"units"/utf8>>,
                                                                                        none,
                                                                                        gleam@dynamic@decode:optional(
                                                                                            units_decoder(
                                                                                                
                                                                                            )
                                                                                        ),
                                                                                        fun(
                                                                                            Units
                                                                                        ) ->
                                                                                            gleam@dynamic@decode:success(
                                                                                                {report_descriptor,
                                                                                                    Aggregate,
                                                                                                    Frequency,
                                                                                                    Historical,
                                                                                                    Num_intervals,
                                                                                                    Payload_type,
                                                                                                    Reading_type,
                                                                                                    Repeat,
                                                                                                    Report_intervals,
                                                                                                    Start_interval,
                                                                                                    Targets,
                                                                                                    Units}
                                                                                            )
                                                                                        end
                                                                                    )
                                                                                end
                                                                            )
                                                                        end
                                                                    )
                                                                end
                                                            )
                                                        end
                                                    )
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 631).
-spec event_payload_descriptor_decoder() -> gleam@dynamic@decode:decoder(event_payload_descriptor()).
event_payload_descriptor_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"currency"/utf8>>,
        none,
        gleam@dynamic@decode:optional(
            {decoder, fun gleam@dynamic@decode:decode_string/1}
        ),
        fun(Currency) ->
            gleam@dynamic@decode:field(
                <<"objectType"/utf8>>,
                {decoder, fun gleam@dynamic@decode:decode_string/1},
                fun(Object_type) ->
                    gleam@dynamic@decode:field(
                        <<"payloadType"/utf8>>,
                        {decoder, fun gleam@dynamic@decode:decode_string/1},
                        fun(Payload_type) ->
                            gleam@dynamic@decode:optional_field(
                                <<"units"/utf8>>,
                                none,
                                gleam@dynamic@decode:optional(units_decoder()),
                                fun(Units) ->
                                    gleam@dynamic@decode:success(
                                        {event_payload_descriptor,
                                            Currency,
                                            Object_type,
                                            Payload_type,
                                            Units}
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 544).
-spec event_request_decoder() -> gleam@dynamic@decode:decoder(event_request()).
event_request_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"duration"/utf8>>,
        none,
        gleam@dynamic@decode:optional(duration_decoder()),
        fun(Duration) ->
            gleam@dynamic@decode:optional_field(
                <<"eventName"/utf8>>,
                none,
                gleam@dynamic@decode:optional(
                    {decoder, fun gleam@dynamic@decode:decode_string/1}
                ),
                fun(Event_name) ->
                    gleam@dynamic@decode:optional_field(
                        <<"intervalPeriod"/utf8>>,
                        none,
                        gleam@dynamic@decode:optional(interval_period_decoder()),
                        fun(Interval_period) ->
                            gleam@dynamic@decode:optional_field(
                                <<"intervals"/utf8>>,
                                none,
                                gleam@dynamic@decode:optional(
                                    gleam@dynamic@decode:list(
                                        interval_decoder()
                                    )
                                ),
                                fun(Intervals) ->
                                    gleam@dynamic@decode:optional_field(
                                        <<"payloadDescriptors"/utf8>>,
                                        none,
                                        gleam@dynamic@decode:optional(
                                            gleam@dynamic@decode:list(
                                                event_payload_descriptor_decoder(
                                                    
                                                )
                                            )
                                        ),
                                        fun(Payload_descriptors) ->
                                            gleam@dynamic@decode:optional_field(
                                                <<"priority"/utf8>>,
                                                none,
                                                gleam@dynamic@decode:optional(
                                                    {decoder,
                                                        fun gleam@dynamic@decode:decode_int/1}
                                                ),
                                                fun(Priority) ->
                                                    gleam@dynamic@decode:field(
                                                        <<"programID"/utf8>>,
                                                        object_id_decoder(),
                                                        fun(Program_id) ->
                                                            gleam@dynamic@decode:optional_field(
                                                                <<"reportDescriptors"/utf8>>,
                                                                none,
                                                                gleam@dynamic@decode:optional(
                                                                    gleam@dynamic@decode:list(
                                                                        report_descriptor_decoder(
                                                                            
                                                                        )
                                                                    )
                                                                ),
                                                                fun(
                                                                    Report_descriptors
                                                                ) ->
                                                                    gleam@dynamic@decode:optional_field(
                                                                        <<"targets"/utf8>>,
                                                                        none,
                                                                        gleam@dynamic@decode:optional(
                                                                            gleam@dynamic@decode:list(
                                                                                target_decoder(
                                                                                    
                                                                                )
                                                                            )
                                                                        ),
                                                                        fun(
                                                                            Targets
                                                                        ) ->
                                                                            gleam@dynamic@decode:success(
                                                                                {event_request,
                                                                                    Duration,
                                                                                    Event_name,
                                                                                    Interval_period,
                                                                                    Intervals,
                                                                                    Payload_descriptors,
                                                                                    Priority,
                                                                                    Program_id,
                                                                                    Report_descriptors,
                                                                                    Targets}
                                                                            )
                                                                        end
                                                                    )
                                                                end
                                                            )
                                                        end
                                                    )
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 676).
-spec units_encode(binary()) -> gleam@json:json().
units_encode(Data) ->
    gleam@json:string(Data).

-file("src/oadr3/schema.gleam", 921).
-spec reading_type_encode(binary()) -> gleam@json:json().
reading_type_encode(Data) ->
    gleam@json:string(Data).

-file("src/oadr3/schema.gleam", 886).
-spec report_descriptor_encode(report_descriptor()) -> gleam@json:json().
report_descriptor_encode(Data) ->
    oadr3@utils:object(
        [{<<"aggregate"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun gleam@json:bool/1
                )},
            {<<"frequency"/utf8>>,
                gleam@json:nullable(
                    erlang:element(3, Data),
                    fun gleam@json:int/1
                )},
            {<<"historical"/utf8>>,
                gleam@json:nullable(
                    erlang:element(4, Data),
                    fun gleam@json:bool/1
                )},
            {<<"numIntervals"/utf8>>,
                gleam@json:nullable(
                    erlang:element(5, Data),
                    fun gleam@json:int/1
                )},
            {<<"payloadType"/utf8>>, gleam@json:string(erlang:element(6, Data))},
            {<<"readingType"/utf8>>,
                gleam@json:nullable(
                    erlang:element(7, Data),
                    fun reading_type_encode/1
                )},
            {<<"repeat"/utf8>>,
                gleam@json:nullable(
                    erlang:element(8, Data),
                    fun gleam@json:int/1
                )},
            {<<"reportIntervals"/utf8>>,
                gleam@json:nullable(
                    erlang:element(9, Data),
                    fun gleam@json:string/1
                )},
            {<<"startInterval"/utf8>>,
                gleam@json:nullable(
                    erlang:element(10, Data),
                    fun gleam@json:int/1
                )},
            {<<"targets"/utf8>>,
                gleam@json:nullable(
                    erlang:element(11, Data),
                    fun(_capture) ->
                        gleam@json:array(_capture, fun target_encode/1)
                    end
                )},
            {<<"units"/utf8>>,
                gleam@json:nullable(
                    erlang:element(12, Data),
                    fun units_encode/1
                )}]
    ).

-file("src/oadr3/schema.gleam", 652).
-spec event_payload_descriptor_encode(event_payload_descriptor()) -> gleam@json:json().
event_payload_descriptor_encode(Data) ->
    oadr3@utils:object(
        [{<<"currency"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun gleam@json:string/1
                )},
            {<<"objectType"/utf8>>, gleam@json:string(erlang:element(3, Data))},
            {<<"payloadType"/utf8>>, gleam@json:string(erlang:element(4, Data))},
            {<<"units"/utf8>>,
                gleam@json:nullable(erlang:element(5, Data), fun units_encode/1)}]
    ).

-file("src/oadr3/schema.gleam", 599).
-spec event_request_encode(event_request()) -> gleam@json:json().
event_request_encode(Data) ->
    oadr3@utils:object(
        [{<<"duration"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun duration_encode/1
                )},
            {<<"eventName"/utf8>>,
                gleam@json:nullable(
                    erlang:element(3, Data),
                    fun gleam@json:string/1
                )},
            {<<"intervalPeriod"/utf8>>,
                gleam@json:nullable(
                    erlang:element(4, Data),
                    fun interval_period_encode/1
                )},
            {<<"intervals"/utf8>>,
                gleam@json:nullable(
                    erlang:element(5, Data),
                    fun(_capture) ->
                        gleam@json:array(_capture, fun interval_encode/1)
                    end
                )},
            {<<"payloadDescriptors"/utf8>>,
                gleam@json:nullable(
                    erlang:element(6, Data),
                    fun(_capture@1) ->
                        gleam@json:array(
                            _capture@1,
                            fun event_payload_descriptor_encode/1
                        )
                    end
                )},
            {<<"priority"/utf8>>,
                gleam@json:nullable(
                    erlang:element(7, Data),
                    fun gleam@json:int/1
                )},
            {<<"programID"/utf8>>, object_id_encode(erlang:element(8, Data))},
            {<<"reportDescriptors"/utf8>>,
                gleam@json:nullable(
                    erlang:element(9, Data),
                    fun(_capture@2) ->
                        gleam@json:array(
                            _capture@2,
                            fun report_descriptor_encode/1
                        )
                    end
                )},
            {<<"targets"/utf8>>,
                gleam@json:nullable(
                    erlang:element(10, Data),
                    fun(_capture@3) ->
                        gleam@json:array(_capture@3, fun target_encode/1)
                    end
                )}]
    ).

-file("src/oadr3/schema.gleam", 661).
-spec mqtt_notifier_authentication_anonymous_decoder() -> gleam@dynamic@decode:decoder(mqtt_notifier_authentication_anonymous()).
mqtt_notifier_authentication_anonymous_decoder() ->
    gleam@dynamic@decode:field(
        <<"method"/utf8>>,
        {decoder, fun gleam@dynamic@decode:decode_string/1},
        fun(Method_) ->
            gleam@dynamic@decode:success(
                {mqtt_notifier_authentication_anonymous, Method_}
            )
        end
    ).

-file("src/oadr3/schema.gleam", 666).
-spec mqtt_notifier_authentication_anonymous_encode(
    mqtt_notifier_authentication_anonymous()
) -> gleam@json:json().
mqtt_notifier_authentication_anonymous_encode(Data) ->
    oadr3@utils:object(
        [{<<"method"/utf8>>, gleam@json:string(erlang:element(2, Data))}]
    ).

-file("src/oadr3/schema.gleam", 680).
-spec notifiers_response_decoder() -> gleam@dynamic@decode:decoder(notifiers_response()).
notifiers_response_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"MQTT"/utf8>>,
        none,
        gleam@dynamic@decode:optional(mqtt_notifier_binding_object_decoder()),
        fun(Mqtt) ->
            gleam@dynamic@decode:field(
                <<"WEBHOOK"/utf8>>,
                {decoder, fun gleam@dynamic@decode:decode_bool/1},
                fun(Webhook) ->
                    gleam@dynamic@decode:success(
                        {notifiers_response, Mqtt, Webhook}
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 690).
-spec notifiers_response_encode(notifiers_response()) -> gleam@json:json().
notifiers_response_encode(Data) ->
    oadr3@utils:object(
        [{<<"MQTT"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun mqtt_notifier_binding_object_encode/1
                )},
            {<<"WEBHOOK"/utf8>>, gleam@json:bool(erlang:element(3, Data))}]
    ).

-file("src/oadr3/schema.gleam", 746).
-spec notification_decoder() -> gleam@dynamic@decode:decoder(notification()).
notification_decoder() ->
    gleam@dynamic@decode:field(
        <<"object"/utf8>>,
        gleam@dynamic@decode:new_primitive_decoder(
            <<"Nil"/utf8>>,
            fun(_) -> {ok, nil} end
        ),
        fun(Object) ->
            gleam@dynamic@decode:field(
                <<"objectType"/utf8>>,
                object_types_decoder(),
                fun(Object_type) ->
                    gleam@dynamic@decode:field(
                        <<"operation"/utf8>>,
                        {decoder, fun gleam@dynamic@decode:decode_string/1},
                        fun(Operation) ->
                            gleam@dynamic@decode:optional_field(
                                <<"targets"/utf8>>,
                                none,
                                gleam@dynamic@decode:optional(
                                    gleam@dynamic@decode:list(target_decoder())
                                ),
                                fun(Targets) ->
                                    gleam@dynamic@decode:success(
                                        {notification,
                                            Object,
                                            Object_type,
                                            Operation,
                                            Targets}
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 766).
-spec notification_encode(notification()) -> gleam@json:json().
notification_encode(Data) ->
    oadr3@utils:object(
        [{<<"object"/utf8>>,
                (fun(_) -> gleam@json:null() end)(erlang:element(2, Data))},
            {<<"objectType"/utf8>>,
                object_types_encode(erlang:element(3, Data))},
            {<<"operation"/utf8>>, gleam@json:string(erlang:element(4, Data))},
            {<<"targets"/utf8>>,
                gleam@json:nullable(
                    erlang:element(5, Data),
                    fun(_capture) ->
                        gleam@json:array(_capture, fun target_encode/1)
                    end
                )}]
    ).

-file("src/oadr3/schema.gleam", 775).
-spec client_credential_request_decoder() -> gleam@dynamic@decode:decoder(client_credential_request()).
client_credential_request_decoder() ->
    gleam@dynamic@decode:field(
        <<"client_id"/utf8>>,
        {decoder, fun gleam@dynamic@decode:decode_string/1},
        fun(Client_id) ->
            gleam@dynamic@decode:field(
                <<"client_secret"/utf8>>,
                {decoder, fun gleam@dynamic@decode:decode_string/1},
                fun(Client_secret) ->
                    gleam@dynamic@decode:field(
                        <<"grant_type"/utf8>>,
                        {decoder, fun gleam@dynamic@decode:decode_string/1},
                        fun(Grant_type) ->
                            gleam@dynamic@decode:optional_field(
                                <<"scope"/utf8>>,
                                none,
                                gleam@dynamic@decode:optional(
                                    {decoder,
                                        fun gleam@dynamic@decode:decode_string/1}
                                ),
                                fun(Scope) ->
                                    gleam@dynamic@decode:success(
                                        {client_credential_request,
                                            Client_id,
                                            Client_secret,
                                            Grant_type,
                                            Scope}
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 792).
-spec client_credential_request_encode(client_credential_request()) -> gleam@json:json().
client_credential_request_encode(Data) ->
    oadr3@utils:object(
        [{<<"client_id"/utf8>>, gleam@json:string(erlang:element(2, Data))},
            {<<"client_secret"/utf8>>,
                gleam@json:string(erlang:element(3, Data))},
            {<<"grant_type"/utf8>>, gleam@json:string(erlang:element(4, Data))},
            {<<"scope"/utf8>>,
                gleam@json:nullable(
                    erlang:element(5, Data),
                    fun gleam@json:string/1
                )}]
    ).

-file("src/oadr3/schema.gleam", 801).
-spec resource_request_decoder() -> gleam@dynamic@decode:decoder(oadr3@utils:any_()).
resource_request_decoder() ->
    oadr3@utils:any_decoder().

-file("src/oadr3/schema.gleam", 805).
-spec resource_request_encode(oadr3@utils:any_()) -> gleam@json:json().
resource_request_encode(Data) ->
    oadr3@utils:any_to_json(Data).

-file("src/oadr3/schema.gleam", 809).
-spec point_decoder() -> gleam@dynamic@decode:decoder(point()).
point_decoder() ->
    gleam@dynamic@decode:field(
        <<"x"/utf8>>,
        {decoder, fun gleam@dynamic@decode:decode_float/1},
        fun(X) ->
            gleam@dynamic@decode:field(
                <<"y"/utf8>>,
                {decoder, fun gleam@dynamic@decode:decode_float/1},
                fun(Y) -> gleam@dynamic@decode:success({point, X, Y}) end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 815).
-spec point_encode(point()) -> gleam@json:json().
point_encode(Data) ->
    oadr3@utils:object(
        [{<<"x"/utf8>>, gleam@json:float(erlang:element(2, Data))},
            {<<"y"/utf8>>, gleam@json:float(erlang:element(3, Data))}]
    ).

-file("src/oadr3/schema.gleam", 1072).
-spec report_payload_descriptor_decoder() -> gleam@dynamic@decode:decoder(report_payload_descriptor()).
report_payload_descriptor_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"accuracy"/utf8>>,
        none,
        gleam@dynamic@decode:optional(
            {decoder, fun gleam@dynamic@decode:decode_float/1}
        ),
        fun(Accuracy) ->
            gleam@dynamic@decode:optional_field(
                <<"confidence"/utf8>>,
                none,
                gleam@dynamic@decode:optional(
                    {decoder, fun gleam@dynamic@decode:decode_int/1}
                ),
                fun(Confidence) ->
                    gleam@dynamic@decode:field(
                        <<"objectType"/utf8>>,
                        {decoder, fun gleam@dynamic@decode:decode_string/1},
                        fun(Object_type) ->
                            gleam@dynamic@decode:field(
                                <<"payloadType"/utf8>>,
                                {decoder,
                                    fun gleam@dynamic@decode:decode_string/1},
                                fun(Payload_type) ->
                                    gleam@dynamic@decode:optional_field(
                                        <<"readingType"/utf8>>,
                                        none,
                                        gleam@dynamic@decode:optional(
                                            reading_type_decoder()
                                        ),
                                        fun(Reading_type) ->
                                            gleam@dynamic@decode:optional_field(
                                                <<"units"/utf8>>,
                                                none,
                                                gleam@dynamic@decode:optional(
                                                    units_decoder()
                                                ),
                                                fun(Units) ->
                                                    gleam@dynamic@decode:success(
                                                        {report_payload_descriptor,
                                                            Accuracy,
                                                            Confidence,
                                                            Object_type,
                                                            Payload_type,
                                                            Reading_type,
                                                            Units}
                                                    )
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1030).
-spec report_request_decoder() -> gleam@dynamic@decode:decoder(report_request()).
report_request_decoder() ->
    gleam@dynamic@decode:field(
        <<"clientName"/utf8>>,
        client_name_decoder(),
        fun(Client_name) ->
            gleam@dynamic@decode:field(
                <<"eventID"/utf8>>,
                object_id_decoder(),
                fun(Event_id) ->
                    gleam@dynamic@decode:optional_field(
                        <<"payloadDescriptors"/utf8>>,
                        none,
                        gleam@dynamic@decode:optional(
                            gleam@dynamic@decode:list(
                                report_payload_descriptor_decoder()
                            )
                        ),
                        fun(Payload_descriptors) ->
                            gleam@dynamic@decode:optional_field(
                                <<"reportName"/utf8>>,
                                none,
                                gleam@dynamic@decode:optional(
                                    {decoder,
                                        fun gleam@dynamic@decode:decode_string/1}
                                ),
                                fun(Report_name) ->
                                    gleam@dynamic@decode:field(
                                        <<"resources"/utf8>>,
                                        gleam@dynamic@decode:list(
                                            anon_818bb683_decoder()
                                        ),
                                        fun(Resources) ->
                                            gleam@dynamic@decode:success(
                                                {report_request,
                                                    Client_name,
                                                    Event_id,
                                                    Payload_descriptors,
                                                    Report_name,
                                                    Resources}
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 902).
-spec report_decoder() -> gleam@dynamic@decode:decoder({object_metadata(),
    report_request(),
    anon97535fea()}).
report_decoder() ->
    gleam@dynamic@decode:then(
        object_metadata_decoder(),
        fun(E0) ->
            gleam@dynamic@decode:then(
                report_request_decoder(),
                fun(E1) ->
                    gleam@dynamic@decode:then(
                        anon_97535fea_decoder(),
                        fun(E2) ->
                            gleam@dynamic@decode:success({E0, E1, E2})
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1105).
-spec report_payload_descriptor_encode(report_payload_descriptor()) -> gleam@json:json().
report_payload_descriptor_encode(Data) ->
    oadr3@utils:object(
        [{<<"accuracy"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun gleam@json:float/1
                )},
            {<<"confidence"/utf8>>,
                gleam@json:nullable(
                    erlang:element(3, Data),
                    fun gleam@json:int/1
                )},
            {<<"objectType"/utf8>>, gleam@json:string(erlang:element(4, Data))},
            {<<"payloadType"/utf8>>, gleam@json:string(erlang:element(5, Data))},
            {<<"readingType"/utf8>>,
                gleam@json:nullable(
                    erlang:element(6, Data),
                    fun reading_type_encode/1
                )},
            {<<"units"/utf8>>,
                gleam@json:nullable(erlang:element(7, Data), fun units_encode/1)}]
    ).

-file("src/oadr3/schema.gleam", 1056).
-spec report_request_encode(report_request()) -> gleam@json:json().
report_request_encode(Data) ->
    oadr3@utils:object(
        [{<<"clientName"/utf8>>, client_name_encode(erlang:element(2, Data))},
            {<<"eventID"/utf8>>, object_id_encode(erlang:element(3, Data))},
            {<<"payloadDescriptors"/utf8>>,
                gleam@json:nullable(
                    erlang:element(4, Data),
                    fun(_capture) ->
                        gleam@json:array(
                            _capture,
                            fun report_payload_descriptor_encode/1
                        )
                    end
                )},
            {<<"reportName"/utf8>>,
                gleam@json:nullable(
                    erlang:element(5, Data),
                    fun gleam@json:string/1
                )},
            {<<"resources"/utf8>>,
                gleam@json:array(
                    erlang:element(6, Data),
                    fun anon_818bb683_encode/1
                )}]
    ).

-file("src/oadr3/schema.gleam", 909).
-spec report_encode({object_metadata(), report_request(), anon97535fea()}) -> gleam@json:json().
report_encode(Data) ->
    oadr3_utils_ffi:merge(
        [object_metadata_encode(erlang:element(1, Data)),
            report_request_encode(erlang:element(2, Data)),
            anon_97535fea_encode(erlang:element(3, Data))]
    ).

-file("src/oadr3/schema.gleam", 961).
-spec mqtt_notifier_authentication_oauth2_bearer_token_decoder() -> gleam@dynamic@decode:decoder(mqtt_notifier_authentication_oauth2_bearer_token()).
mqtt_notifier_authentication_oauth2_bearer_token_decoder() ->
    gleam@dynamic@decode:field(
        <<"method"/utf8>>,
        {decoder, fun gleam@dynamic@decode:decode_string/1},
        fun(Method_) ->
            gleam@dynamic@decode:field(
                <<"username"/utf8>>,
                {decoder, fun gleam@dynamic@decode:decode_string/1},
                fun(Username) ->
                    gleam@dynamic@decode:success(
                        {mqtt_notifier_authentication_oauth2_bearer_token,
                            Method_,
                            Username}
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 970).
-spec mqtt_notifier_authentication_oauth2_bearer_token_encode(
    mqtt_notifier_authentication_oauth2_bearer_token()
) -> gleam@json:json().
mqtt_notifier_authentication_oauth2_bearer_token_encode(Data) ->
    oadr3@utils:object(
        [{<<"method"/utf8>>, gleam@json:string(erlang:element(2, Data))},
            {<<"username"/utf8>>, gleam@json:string(erlang:element(3, Data))}]
    ).

-file("src/oadr3/schema.gleam", 987).
-spec auth_error_decoder() -> gleam@dynamic@decode:decoder(auth_error()).
auth_error_decoder() ->
    gleam@dynamic@decode:field(
        <<"error"/utf8>>,
        {decoder, fun gleam@dynamic@decode:decode_string/1},
        fun(Error) ->
            gleam@dynamic@decode:optional_field(
                <<"error_description"/utf8>>,
                none,
                gleam@dynamic@decode:optional(
                    {decoder, fun gleam@dynamic@decode:decode_string/1}
                ),
                fun(Error_description) ->
                    gleam@dynamic@decode:optional_field(
                        <<"error_uri"/utf8>>,
                        none,
                        gleam@dynamic@decode:optional(
                            {decoder, fun gleam@dynamic@decode:decode_string/1}
                        ),
                        fun(Error_uri) ->
                            gleam@dynamic@decode:success(
                                {auth_error,
                                    Error,
                                    Error_description,
                                    Error_uri}
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1006).
-spec auth_error_encode(auth_error()) -> gleam@json:json().
auth_error_encode(Data) ->
    oadr3@utils:object(
        [{<<"error"/utf8>>, gleam@json:string(erlang:element(2, Data))},
            {<<"error_description"/utf8>>,
                gleam@json:nullable(
                    erlang:element(3, Data),
                    fun gleam@json:string/1
                )},
            {<<"error_uri"/utf8>>,
                gleam@json:nullable(
                    erlang:element(4, Data),
                    fun gleam@json:string/1
                )}]
    ).

-file("src/oadr3/schema.gleam", 1116).
-spec problem_decoder() -> gleam@dynamic@decode:decoder(problem()).
problem_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"detail"/utf8>>,
        none,
        gleam@dynamic@decode:optional(
            {decoder, fun gleam@dynamic@decode:decode_string/1}
        ),
        fun(Detail) ->
            gleam@dynamic@decode:optional_field(
                <<"instance"/utf8>>,
                none,
                gleam@dynamic@decode:optional(
                    {decoder, fun gleam@dynamic@decode:decode_string/1}
                ),
                fun(Instance) ->
                    gleam@dynamic@decode:optional_field(
                        <<"status"/utf8>>,
                        none,
                        gleam@dynamic@decode:optional(
                            {decoder, fun gleam@dynamic@decode:decode_int/1}
                        ),
                        fun(Status) ->
                            gleam@dynamic@decode:optional_field(
                                <<"title"/utf8>>,
                                none,
                                gleam@dynamic@decode:optional(
                                    {decoder,
                                        fun gleam@dynamic@decode:decode_string/1}
                                ),
                                fun(Title) ->
                                    gleam@dynamic@decode:optional_field(
                                        <<"type"/utf8>>,
                                        none,
                                        gleam@dynamic@decode:optional(
                                            {decoder,
                                                fun gleam@dynamic@decode:decode_string/1}
                                        ),
                                        fun(Type_) ->
                                            gleam@dynamic@decode:success(
                                                {problem,
                                                    Detail,
                                                    Instance,
                                                    Status,
                                                    Title,
                                                    Type_}
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1151).
-spec problem_encode(problem()) -> gleam@json:json().
problem_encode(Data) ->
    oadr3@utils:object(
        [{<<"detail"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun gleam@json:string/1
                )},
            {<<"instance"/utf8>>,
                gleam@json:nullable(
                    erlang:element(3, Data),
                    fun gleam@json:string/1
                )},
            {<<"status"/utf8>>,
                gleam@json:nullable(
                    erlang:element(4, Data),
                    fun gleam@json:int/1
                )},
            {<<"title"/utf8>>,
                gleam@json:nullable(
                    erlang:element(5, Data),
                    fun gleam@json:string/1
                )},
            {<<"type"/utf8>>,
                gleam@json:nullable(
                    erlang:element(6, Data),
                    fun gleam@json:string/1
                )}]
    ).

-file("src/oadr3/schema.gleam", 1169).
-spec bl_resource_request_decoder() -> gleam@dynamic@decode:decoder(bl_resource_request()).
bl_resource_request_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"attributes"/utf8>>,
        none,
        gleam@dynamic@decode:optional(
            gleam@dynamic@decode:list(values_map_decoder())
        ),
        fun(Attributes) ->
            gleam@dynamic@decode:field(
                <<"clientID"/utf8>>,
                client_id_decoder(),
                fun(Client_id) ->
                    gleam@dynamic@decode:field(
                        <<"objectType"/utf8>>,
                        {decoder, fun gleam@dynamic@decode:decode_string/1},
                        fun(Object_type) ->
                            gleam@dynamic@decode:field(
                                <<"resourceName"/utf8>>,
                                resource_name_decoder(),
                                fun(Resource_name) ->
                                    gleam@dynamic@decode:optional_field(
                                        <<"targets"/utf8>>,
                                        none,
                                        gleam@dynamic@decode:optional(
                                            gleam@dynamic@decode:list(
                                                target_decoder()
                                            )
                                        ),
                                        fun(Targets) ->
                                            gleam@dynamic@decode:field(
                                                <<"venID"/utf8>>,
                                                object_id_decoder(),
                                                fun(Ven_id) ->
                                                    gleam@dynamic@decode:success(
                                                        {bl_resource_request,
                                                            Attributes,
                                                            Client_id,
                                                            Object_type,
                                                            Resource_name,
                                                            Targets,
                                                            Ven_id}
                                                    )
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1194).
-spec bl_resource_request_encode(bl_resource_request()) -> gleam@json:json().
bl_resource_request_encode(Data) ->
    oadr3@utils:object(
        [{<<"attributes"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun(_capture) ->
                        gleam@json:array(_capture, fun values_map_encode/1)
                    end
                )},
            {<<"clientID"/utf8>>, client_id_encode(erlang:element(3, Data))},
            {<<"objectType"/utf8>>, gleam@json:string(erlang:element(4, Data))},
            {<<"resourceName"/utf8>>,
                resource_name_encode(erlang:element(5, Data))},
            {<<"targets"/utf8>>,
                gleam@json:nullable(
                    erlang:element(6, Data),
                    fun(_capture@1) ->
                        gleam@json:array(_capture@1, fun target_encode/1)
                    end
                )},
            {<<"venID"/utf8>>, object_id_encode(erlang:element(7, Data))}]
    ).

-file("src/oadr3/schema.gleam", 1360).
-spec event_decoder() -> gleam@dynamic@decode:decoder({object_metadata(),
    event_request()}).
event_decoder() ->
    gleam@dynamic@decode:then(
        object_metadata_decoder(),
        fun(E0) ->
            gleam@dynamic@decode:then(
                event_request_decoder(),
                fun(E1) -> gleam@dynamic@decode:success({E0, E1}) end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1366).
-spec event_encode({object_metadata(), event_request()}) -> gleam@json:json().
event_encode(Data) ->
    oadr3_utils_ffi:merge(
        [object_metadata_encode(erlang:element(1, Data)),
            event_request_encode(erlang:element(2, Data))]
    ).

-file("src/oadr3/schema.gleam", 1370).
-spec ven_request_decoder() -> gleam@dynamic@decode:decoder(oadr3@utils:any_()).
ven_request_decoder() ->
    oadr3@utils:any_decoder().

-file("src/oadr3/schema.gleam", 1374).
-spec ven_request_encode(oadr3@utils:any_()) -> gleam@json:json().
ven_request_encode(Data) ->
    oadr3@utils:any_to_json(Data).

-file("src/oadr3/schema.gleam", 1378).
-spec resource_decoder() -> gleam@dynamic@decode:decoder({object_metadata(),
    bl_resource_request()}).
resource_decoder() ->
    gleam@dynamic@decode:then(
        object_metadata_decoder(),
        fun(E0) ->
            gleam@dynamic@decode:then(
                bl_resource_request_decoder(),
                fun(E1) -> gleam@dynamic@decode:success({E0, E1}) end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1384).
-spec resource_encode({object_metadata(), bl_resource_request()}) -> gleam@json:json().
resource_encode(Data) ->
    oadr3_utils_ffi:merge(
        [object_metadata_encode(erlang:element(1, Data)),
            bl_resource_request_encode(erlang:element(2, Data))]
    ).

-file("src/oadr3/schema.gleam", 1416).
-spec ven_ven_request_decoder() -> gleam@dynamic@decode:decoder(ven_ven_request()).
ven_ven_request_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"attributes"/utf8>>,
        none,
        gleam@dynamic@decode:optional(
            gleam@dynamic@decode:list(values_map_decoder())
        ),
        fun(Attributes) ->
            gleam@dynamic@decode:field(
                <<"objectType"/utf8>>,
                {decoder, fun gleam@dynamic@decode:decode_string/1},
                fun(Object_type) ->
                    gleam@dynamic@decode:field(
                        <<"venName"/utf8>>,
                        ven_name_decoder(),
                        fun(Ven_name) ->
                            gleam@dynamic@decode:success(
                                {ven_ven_request,
                                    Attributes,
                                    Object_type,
                                    Ven_name}
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1431).
-spec ven_ven_request_encode(ven_ven_request()) -> gleam@json:json().
ven_ven_request_encode(Data) ->
    oadr3@utils:object(
        [{<<"attributes"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun(_capture) ->
                        gleam@json:array(_capture, fun values_map_encode/1)
                    end
                )},
            {<<"objectType"/utf8>>, gleam@json:string(erlang:element(3, Data))},
            {<<"venName"/utf8>>, ven_name_encode(erlang:element(4, Data))}]
    ).

-file("src/oadr3/schema.gleam", 1442).
-spec mqtt_notifier_authentication_certificate_decoder() -> gleam@dynamic@decode:decoder(mqtt_notifier_authentication_certificate()).
mqtt_notifier_authentication_certificate_decoder() ->
    gleam@dynamic@decode:field(
        <<"caCert"/utf8>>,
        {decoder, fun gleam@dynamic@decode:decode_string/1},
        fun(Ca_cert) ->
            gleam@dynamic@decode:field(
                <<"clientCert"/utf8>>,
                {decoder, fun gleam@dynamic@decode:decode_string/1},
                fun(Client_cert) ->
                    gleam@dynamic@decode:field(
                        <<"clientKey"/utf8>>,
                        {decoder, fun gleam@dynamic@decode:decode_string/1},
                        fun(Client_key) ->
                            gleam@dynamic@decode:field(
                                <<"method"/utf8>>,
                                {decoder,
                                    fun gleam@dynamic@decode:decode_string/1},
                                fun(Method_) ->
                                    gleam@dynamic@decode:success(
                                        {mqtt_notifier_authentication_certificate,
                                            Ca_cert,
                                            Client_cert,
                                            Client_key,
                                            Method_}
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1455).
-spec mqtt_notifier_authentication_certificate_encode(
    mqtt_notifier_authentication_certificate()
) -> gleam@json:json().
mqtt_notifier_authentication_certificate_encode(Data) ->
    oadr3@utils:object(
        [{<<"caCert"/utf8>>, gleam@json:string(erlang:element(2, Data))},
            {<<"clientCert"/utf8>>, gleam@json:string(erlang:element(3, Data))},
            {<<"clientKey"/utf8>>, gleam@json:string(erlang:element(4, Data))},
            {<<"method"/utf8>>, gleam@json:string(erlang:element(5, Data))}]
    ).

-file("src/oadr3/schema.gleam", 1466).
-spec ven_resource_request_decoder() -> gleam@dynamic@decode:decoder(ven_resource_request()).
ven_resource_request_decoder() ->
    gleam@dynamic@decode:optional_field(
        <<"attributes"/utf8>>,
        none,
        gleam@dynamic@decode:optional(
            gleam@dynamic@decode:list(values_map_decoder())
        ),
        fun(Attributes) ->
            gleam@dynamic@decode:field(
                <<"objectType"/utf8>>,
                {decoder, fun gleam@dynamic@decode:decode_string/1},
                fun(Object_type) ->
                    gleam@dynamic@decode:field(
                        <<"resourceName"/utf8>>,
                        resource_name_decoder(),
                        fun(Resource_name) ->
                            gleam@dynamic@decode:field(
                                <<"venID"/utf8>>,
                                object_id_decoder(),
                                fun(Ven_id) ->
                                    gleam@dynamic@decode:success(
                                        {ven_resource_request,
                                            Attributes,
                                            Object_type,
                                            Resource_name,
                                            Ven_id}
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/oadr3/schema.gleam", 1483).
-spec ven_resource_request_encode(ven_resource_request()) -> gleam@json:json().
ven_resource_request_encode(Data) ->
    oadr3@utils:object(
        [{<<"attributes"/utf8>>,
                gleam@json:nullable(
                    erlang:element(2, Data),
                    fun(_capture) ->
                        gleam@json:array(_capture, fun values_map_encode/1)
                    end
                )},
            {<<"objectType"/utf8>>, gleam@json:string(erlang:element(3, Data))},
            {<<"resourceName"/utf8>>,
                resource_name_encode(erlang:element(4, Data))},
            {<<"venID"/utf8>>, object_id_encode(erlang:element(5, Data))}]
    ).