#pragma once

#include <AK/Optional.h>
#include <LibGC/Ptr.h>
#include <LibJS/Forward.h>
#include <LibJS/Runtime/Value.h>
#include <LibWeb/WebIDL/CallbackType.h>

namespace Web::Bindings {

struct Transformer {
    GC::Ptr<WebIDL::CallbackType> cancel {};
    GC::Ptr<WebIDL::CallbackType> flush {};
    Optional<JS::Value> readable_type {};
    GC::Ptr<WebIDL::CallbackType> start {};
    GC::Ptr<WebIDL::CallbackType> transform {};
    Optional<JS::Value> writable_type {};
};

JS::ThrowCompletionOr<Transformer> convert_to_idl_value_for_transformer(JS::VM&, JS::Value);

} // namespace Web::Bindings
