[options]
girs_directories = ["../gir-files", "../gst-gir-files"]
library = "Gst"
version = "1.0"
min_cfg_version = "1.14"
work_mode = "normal"
concurrency = "send+sync"
generate_safety_asserts = true
single_version_file = true
generate_display_trait = false
trust_return_value_nullability = true

external_libraries = [
    "GLib",
    "GObject",
]

generate = [
    "Gst.BufferingMode",
    "Gst.CapsIntersectMode",
    "Gst.ClockEntryType",
    "Gst.ClockTimeDiff",
    "Gst.DebugColorFlags",
    "Gst.DebugGraphDetails",
    "Gst.EventTypeFlags",
    "Gst.GapFlags",
    "Gst.ParseError",
    "Gst.PluginAPIFlags",
    "Gst.PluginError",
    "Gst.PluginFlags",
    "Gst.ProgressType",
    "Gst.PromiseResult",
    "Gst.QOSType",
    "Gst.SchedulingFlags",
    "Gst.StreamStatusType",
    "Gst.StreamType",
    "Gst.StructureChangeType",
    "Gst.SystemClock",
    "Gst.TaskState",
    "Gst.TocSetter",
    "Gst.URIError",
    "Gst.URIHandler",
]

manual = [
    "GLib.DateTime",
    "GLib.Error",
    "GLib.MainContext",
    "GLib.Quark",
    "GLib.Source",
    "GLib.Type",
    "GObject.Object",
    "GObject.Value",
    "Gst.AllocationParams",
    "Gst.CapsFeatures",
    "Gst.DebugCategory",
    "Gst.DebugMessage",
    "Gst.DeviceProviderClass", # for docs only
    "Gst.ElementClass", # for docs only
    "Gst.Rank",
    "Gst.Segment",
    "Gst.StaticCaps",
    "Gst.StaticPadTemplate",
    "Gst.TypeFind",
]

[[object]]
name = "Gst.*"
status = "generate"
    # We'll opt-in for constants at a later time
    [[object.constant]]
    pattern = ".+"
    ignore = true

    [[object.function]]
    name = "util_dump_mem"
    ignore = true

    [[object.function]]
    name = "util_dump_buffer"
    # We have our Debug impl on buffers
    ignore = true

    [[object.function]]
    name = "protection_select_system"
    # unsupported array type
    ignore = true

    [[object.function]]
    name = "calculate_linear_regression"
    ignore = true

    [[object.function]]
    pattern = "value_.*"
    ignore = true

    [[object.function]]
    pattern = ".*_get_type"
    ignore = true

    [[object.function]]
    pattern = "tag_.*"
    ignore = true

    [[object.function]]
    pattern = "segtrap_.*"
    ignore = true

    [[object.function]]
    pattern = "util_[g]?double_.*"
    ignore = true

    [[object.function]]
    pattern = "util_fraction_.*"
    ignore = true

    [[object.function]]
    name = "util_simplify_fraction"
    ignore = true

    [[object.function]]
    pattern = "util_greatest_.*"
    ignore = true

    [[object.function]]
    pattern = "util_[g]?uint64.*"
    ignore = true

    [[object.function]]
    name = "deinit"
    ignore = true

    [[object.function]]
    name = "util_set_object_arg"
    ignore = true

    [[object.function]]
    name = "util_seqnum_compare"
    ignore = true

    [[object.function]]
    name = "dynamic_type_register"
    ignore = true

    [[object.function]]
    name = "flow_get_name"
    ignore = true

    [[object.function]]
    name = "filename_to_uri"
    ignore = true

    [[object.function]]
    name = "is_initialized"
    ignore = true

    [[object.function]]
    name = "debug_add_log_function"
    ignore = true

    [[object.function]]
    name = "debug_remove_log_function"
    ignore = true

    [[object.function]]
    name = "debug_remove_log_function_by_data"
    ignore = true

    [[object.function]]
    name = "debug_construct_term_color"
    ignore = true

    [[object.function]]
    name = "debug_construct_win_color"
    ignore = true

    [[object.function]]
    name = "debug_get_all_categories"
    ignore = true

    [[object.function]]
    name = "debug_get_color_mode"
    ignore = true

    [[object.function]]
    pattern = "debug_log.*"
    ignore = true

    [[object.function]]
    name = "debug_set_color_mode"
    ignore = true

    [[object.function]]
    name = "debug_set_color_mode_from_string"
    ignore = true

    [[object.function]]
    name = "error_get_message"
    ignore = true

    [[object.function]]
    name = "flow_to_quark"
    ignore = true

    [[object.function]]
    name = "formats_contains"
    ignore = true

    [[object.function]]
    pattern = "info_.*"
    ignore = true

    [[object.function]]
    pattern = "print.*"
    ignore = true

    [[object.function]]
    pattern = "init.*"
    ignore = true

    [[object.function]]
    pattern = "param_spec_.*"
    ignore = true

    [[object.function]]
    name = "is_caps_features"
    ignore = true

    [[object.function]]
    name = "make_element_message_details"
    ignore = true

    [[object.function]]
    name = "util_array_binary_search"
    ignore = true

    [[object.function]]
    name = "util_get_object_array"
    ignore = true

    [[object.function]]
    name = "util_set_object_array"
    ignore = true

    [[object.function]]
    name = "util_set_value_from_string"
    ignore = true

    [[object.function]]
    pattern = "parse.*full"
    # wrong mutable for context parameter
    ignore = true

    [[object.function]]
    name = "update_registry"
        [object.function.return]
        bool_return_is_error = "Failed to update the registry"

    [[object.function]]
    name = "util_group_id_next"
    # newtype wrapper
    ignore = true

    [[object.function]]
    name = "util_seqnum_next"
    # newtype wrapper
    ignore = true

    [[object.function]]
    name = "protection_filter_systems_by_available_decryptors"
    # wrong array annotations
    ignore = true

    [[object.function]]
    pattern = "clear_.*"
    # C memory management
    ignore = true

    [[object.function]]
    name = "debug_get_stack_trace"
    # can be called before gst_init()
    assertion = "skip"
        [object.function.return]
        nullable_return_is_error = "Failed to get stack trace"

    [[object.function]]
    name = "get_main_executable_path"
        [object.function.return]
        nullable_return_is_error = "Failed to get main executable path"

    [[object.function]]
    name = "debug_set_default_threshold"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "debug_get_default_threshold"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "debug_set_threshold_for_name"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "debug_set_threshold_from_string"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "debug_unset_threshold_for_name"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "debug_print_stack_trace"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "debug_is_active"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "debug_is_colored"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "debug_set_active"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "debug_set_colored"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "debug_add_ring_buffer_logger"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "debug_remove_ring_buffer_logger"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "debug_ring_buffer_logger_get_logs"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "util_get_timestamp"
    # can be called before gst_init()
    assertion = "skip"
        [object.function.return]
        # always returns a value
        mandatory = true

    [[object.function]]
    name = "version"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "version_string"
    # can be called before gst_init()
    assertion = "skip"

    [[object.function]]
    name = "type_is_plugin_api"
    # We implement it in an extension Trait
    ignore = true

    [[object.function]]
    name = "tracing_register_hook"
    # implemented as part of Tracer subclassing
    manual = true

    [[object.function]]
    name = "tracing_get_active_tracers"
    rename = "active_tracers"
    # Use glib::List as return type
    manual = true

    [[object.function]]
    name = "type_mark_as_plugin_api"
    # Needs integration into subclassing infrastructure
    ignore = true

    [[object.function]]
    name = "util_filename_compare"
    # Convert return type to `Ordering`
    manual = true

    [[object.function]]
    name = "util_ceil_log2"
    # can be called before gst_init()
    assertion = "skip"

[[object]]
name = "Gst.Allocator"
status = "generate"
    [[object.function]]
    name = "register"
    # Steals the string name in < 1.20.5
    manual = true

    [[object.function]]
    name = "alloc"
        [object.function.return]
        nullable_return_is_error = "Failed to allocate memory"
        [[object.function.parameter]]
        name = "params"
        const = true

[[object]]
name = "Gst.Bin"
status = "generate"
trait_name = "GstBinExt"
    [[object.function]]
    name = "new"
    # Remove the optional `name` argument in favor of using the builder
    manual = true

    [[object.signal]]
    name = "do-latency"
    # Use Result<(), glib::BoolError>
    manual = true

    [[object.function]]
    name = "add_many"
    # Implemented by repeatedly calling add()
    manual = true
    [[object.function]]
    name = "remove_many"
    # Implemented by repeatedly calling remove()
    manual = true

    [[object.function]]
    name = "iterate_all_by_element_factory_name"
    manual = true
    [[object.function]]
    name = "iterate_all_by_interface"
    manual = true
    [[object.function]]
    name = "iterate_elements"
    manual = true
    [[object.function]]
    name = "iterate_recurse"
    manual = true
    [[object.function]]
    name = "iterate_sinks"
    manual = true
    [[object.function]]
    name = "iterate_sorted"
    manual = true
    [[object.function]]
    name = "iterate_sources"
    manual = true

    [[object.function]]
    name = "add"
        [object.function.return]
        bool_return_is_error = "Failed to add element"

    [[object.function]]
    name = "remove"
        [object.function.return]
        bool_return_is_error = "Failed to remove element"

    [[object.function]]
    name = "recalculate_latency"
        [object.function.return]
        bool_return_is_error = "Failed to recalculate latency"

    [[object.function]]
    name = "sync_children_states"
        [object.function.return]
        bool_return_is_error = "Failed to sync children states"

[[object]]
name = "Gst.BinFlags"
status = "generate"
    [[object.member]]
    name = "last"
    ignore = true

[[object]]
name = "Gst.Buffer"
status = "manual"
ref_mode = "ref"

    [[object.function]]
    name = "map"
    # Readable and writable variant dealing with mutability
    # Non-into variants available under BufferRef
    rename = "into_mapped_buffer_readable"

    [[object.function]]
    name = "unmap"
    ignore = true

[[object]]
name = "Gst.BufferCopyFlags"
status = "generate"
    [[object.member]]
    name = "none"
    ignore = true

[[object]]
name = "Gst.BufferFlags"
status = "generate"
    [[object.member]]
    name = "last"
    ignore = true

[[object]]
name = "Gst.BufferList"
status = "manual"
ref_mode = "ref"

[[object]]
name = "Gst.BufferPool"
status = "generate"
manual_traits = ["BufferPoolExtManual"]
    [[object.function]]
    pattern = "config_.*"
    # A different type
    ignore = true

    [[object.function]]
    name = "get_config"
    # A different type
    manual = true

    [[object.function]]
    name = "set_config"
    # Takes ownership
    manual = true

    [[object.function]]
    name = "acquire_buffer"
    # Params and return value
    manual = true

    [[object.function]]
    name = "set_active"
        [object.function.return]
        bool_return_is_error = "Failed to activate buffer pool"

[[object]]
name = "Gst.BufferPoolAcquireFlags"
status = "generate"
    [[object.member]]
    name = "none"
    ignore = true
    [[object.member]]
    name = "last"
    ignore = true

[[object]]
name = "Gst.Bus"
status = "generate"
final_type = true
    [[object.function]]
    name = "set_sync_handler"
    # Into<Option<_>> makes this hard to use
    manual = true

    [[object.function]]
    name = "add_signal_watch_full"
    # Priority
    manual = true

    [[object.function]]
    name = "timed_pop_filtered"
    # Uses enum as flags
    manual = true
    [[object.function]]
    name = "pop_filtered"
    # Uses enum as flags
    manual = true
    [[object.function]]
    name = "poll"
    # Uses enum as flags
    manual = true

    [[object.function]]
    name = "create_watch"
    # More convenient manual implementation
    manual = true

    [[object.function]]
    name = "add_watch"
    # More specific trait bounds possible for the closure
    manual = true

    [[object.function]]
    name = "add_watch_full"
    # More specific trait bounds possible for the closure
    manual = true

    [[object.function]]
    name = "remove_watch"
    visibility = "crate"
        [object.function.return]
        bool_return_is_error = "Bus has no event source"

    [[object.signal]]
    name = "message"
    concurrency = "send"

    [[object.function]]
    name = "post"
        [object.function.return]
        bool_return_is_error = "Failed to post message"

[[object]]
name = "Gst.BusSyncReply"
status = "generate"
exhaustive = true

[[object]]
name = "Gst.Caps"
status = "manual"
ref_mode = "ref"

[[object]]
name = "Gst.ChildProxy"
status = "generate"
manual_traits = ["ChildProxyExtManual"]
    [[object.function]]
    name = "get_property"
    rename = "child_property"
    manual = true
    [[object.function]]
    name = "set_property"
    rename = "set_child_property"
    manual = true
    [[object.function]]
    name = "lookup"
    manual = true

[[object]]
name = "Gst.Clock"
status = "generate"
manual_traits = ["ClockExtManual"]
    [[object.function]]
    name = "adjust_with_calibration"
    # Associated function
    manual = true
    [[object.function]]
    name = "unadjust_with_calibration"
    # Associated function
    manual = true

    [[object.function]]
    name = "new_periodic_id"
    manual = true
    [[object.function]]
    name = "periodic_id_reinit"
    manual = true
    [[object.function]]
    name = "new_single_shot_id"
    manual = true
    [[object.function]]
    name = "single_shot_id_reinit"
    manual = true

    [[object.function]]
    name = "add_observation"
        [[object.function.parameter]]
        name = "slave"
        mandatory = true
        [[object.function.parameter]]
        name = "master"
        mandatory = true

    [[object.function]]
    name = "add_observation_unapplied"
        [[object.function.parameter]]
        name = "slave"
        mandatory = true
        [[object.function.parameter]]
        name = "master"
        mandatory = true
        [[object.function.parameter]]
        name = "internal"
        mandatory = true
        [[object.function.parameter]]
        name = "external"
        mandatory = true
        [[object.function.parameter]]
        name = "rate_num"
        mandatory = true
        [[object.function.parameter]]
        name = "rate_denom"
        mandatory = true

    [[object.function]]
    name = "adjust_unlocked"
        [[object.function.parameter]]
        name = "internal"
        mandatory = true

    [[object.function]]
    name = "get_calibration"
        [[object.function.parameter]]
        name = "internal"
        mandatory = true
        [[object.function.parameter]]
        name = "external"
        mandatory = true
        [[object.function.parameter]]
        name = "rate_num"
        mandatory = true
        [[object.function.parameter]]
        name = "rate_denom"
        mandatory = true

    [[object.function]]
    name = "get_internal_time"
        [object.function.return]
        mandatory = true

    [[object.function]]
    name = "get_resolution"
        [object.function.return]
        mandatory = true

    [[object.function]]
    name = "set_calibration"
        [[object.function.parameter]]
        name = "internal"
        mandatory = true
        [[object.function.parameter]]
        name = "external"
        mandatory = true
        [[object.function.parameter]]
        name = "rate_num"
        mandatory = true
        [[object.function.parameter]]
        name = "rate_denom"
        mandatory = true

    [[object.function]]
    name = "set_master"
        [object.function.return]
        bool_return_is_error = "Failed to set master clock"

    [[object.function]]
    name = "set_resolution"
        [[object.function.parameter]]
        name = "resolution"
        mandatory = true
        [object.function.return]
        mandatory = true

    [[object.function]]
    name = "unadjust_unlocked"
        [[object.function.parameter]]
        name = "external"
        mandatory = true

    [[object.function]]
    name = "wait_for_sync"
        [object.function.return]
        bool_return_is_error = "Timed out waiting for sync"

[[object]]
name = "Gst.ClockFlags"
status = "generate"
    [[object.member]]
    name = "last"
    ignore = true

[[object]]
name = "Gst.ClockID"
status = "manual"

    [[object.function]]
    name = "compare_func"
    rename = "compare_by_time"

[[object]]
name = "Gst.ClockReturn"
status = "generate"
must_use = true
exhaustive = true
    [object.conversion_type]
    variant = "Result"
    ok_type = "ClockSuccess"
    err_type = "ClockError"

[[object]]
name = "Gst.ClockTime"
status = "manual"
conversion_type = "Option"

[[object]]
name = "Gst.ClockType"
status = "generate"
    [[object.member]]
    name = "tai"
    version = "1.18"

[[object]]
name = "Gst.Context"
status = "manual"
ref_mode = "ref"

[[object]]
name = "Gst.ControlBinding"
status = "generate"
manual_traits = ["ControlBindingExtManual"]
generate_builder = true
    [[object.function]]
    name = "get_g_value_array"
    manual = true

    [[object.function]]
    name = "get_value"
        [[object.function.parameter]]
        name = "timestamp"
        mandatory = true

    [[object.function]]
    name = "sync_values"
        [[object.function.parameter]]
        name = "timestamp"
        mandatory = true

[[object]]
name = "Gst.ControlSource"
status = "generate"
manual_traits = ["ControlSourceExtManual"]
generate_builder = true
    [[object.function]]
    name = "control_source_get_value"
    rename = "value"
        [[object.function.parameter]]
        name = "timestamp"
        mandatory = true

    [[object.function]]
    name = "control_source_get_value_array"
    manual = true

[[object]]
name = "Gst.CoreError"
status = "generate"
    [[object.member]]
    name = "num_errors"
    ignore = true

[[object]]
name = "Gst.DateTime"
status = "generate"
    [[object.derive]]
    # Don't auto-implement traits
    name = ""

    [[object.function]]
    name = "new"
    # Needs manual checking of invariants
    manual = true

    [[object.function]]
    name = "new_local_time"
    # Needs manual checking of invariants
    manual = true

    [[object.function]]
    name = "new_y"
    # Needs manual checking of invariants
    manual = true

    [[object.function]]
    name = "new_ym"
    # Needs manual checking of invariants
    manual = true

    [[object.function]]
    name = "new_ymd"
    # Needs manual checking of invariants
    manual = true

    [[object.function]]
    name = "get_month"
    # Needs manual checking of invariants
    manual = true

    [[object.function]]
    name = "get_day"
    # Needs manual checking of invariants
    manual = true

    [[object.function]]
    name = "get_hour"
    # Needs manual checking of invariants
    manual = true

    [[object.function]]
    name = "get_minute"
    # Needs manual checking of invariants
    manual = true

    [[object.function]]
    name = "get_second"
    # Needs manual checking of invariants
    manual = true

    [[object.function]]
    name = "get_microsecond"
    # Needs manual checking of invariants
    manual = true

    [[object.function]]
    name = "get_time_zone_offset"
    # Needs manual checking of invariants
    manual = true

    [[object.function]]
    name = "new_from_g_date_time"
        # Function only ever returns NULL if the argument is NULL
        [[object.function.parameter]]
        name = "dt"
        nullable = false
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "to_g_date_time"
        [object.function.return]
        nullable_return_is_error = "Can't create glib::DateTime from DateTime"

    [[object.function]]
    name = "new_from_iso8601_string"
        [object.function.return]
        nullable_return_is_error = "Failed to create DateTime from ISO-8601 string"

    [[object.function]]
    name = "to_iso8601_string"
        [object.function.return]
        nullable_return_is_error = "Failed to create ISO-8601 string from DateTime"

    [[object.function]]
    name = "new_from_unix_epoch_local_time"
        [object.function.return]
        nullable_return_is_error = "Can't create DateTime from UNIX epoch"

    [[object.function]]
    name = "new_from_unix_epoch_local_time_usecs"
        [object.function.return]
        nullable_return_is_error = "Can't create DateTime from UNIX epoch"

    [[object.function]]
    name = "new_from_unix_epoch_utc"
        [object.function.return]
        nullable_return_is_error = "Can't create DateTime from UNIX epoch"

    [[object.function]]
    name = "new_from_unix_epoch_utc_usecs"
        [object.function.return]
        nullable_return_is_error = "Can't create DateTime from UNIX epoch"

[[object]]
name = "Gst.DebugLevel"
status = "generate"
    [[object.member]]
    name = "count"
    ignore = true

[[object]]
name = "Gst.Device"
status = "generate"
    [[object.function]]
    name = "reconfigure_element"
        [object.function.return]
        bool_return_is_error = "Failed to reconfigure the element to use this device"

    [[object.function]]
    name = "create_element"
        [object.function.return]
        nullable_return_is_error = "Failed to create element for device"

[[object]]
name = "Gst.DeviceMonitor"
status = "generate"
manual_traits = ["DeviceMonitorExtManual"]
    [[object.function]]
    name = "add_filter"
    # Return Option<DeviceMonitorFilterId>
    manual = true

    [[object.function]]
    name = "start"
        [object.function.return]
        bool_return_is_error = "Failed to start"

    [[object.function]]
    name = "remove_filter"
    # Use DeviceMonitorFilterId and return Result<(), glib::BoolError>
    manual = true

    [[object.function]]
    name = "get_devices"
    # Use glib::List as return type
    manual = true

[[object]]
name = "Gst.DeviceProvider"
status = "generate"
manual_traits = ["DeviceProviderExtManual"]
    [[object.function]]
    name = "start"
        [object.function.return]
        bool_return_is_error = "Failed to start"

    [[object.function]]
    name = "register"
    manual = true

    [[object.function]]
    name = "get_metadata"
    # better manual function
    manual = true

    [[object.function]]
    name = "get_devices"
    # Use glib::List as return type
    manual = true

[[object]]
name = "Gst.DeviceProviderFactory"
status = "generate"
final_type = true
    [[object.function]]
    name = "list_get_device_providers"
    rename = "factories"
    # Use glib::List as return type
    manual = true

    [[object.function]]
    name = "get_metadata"
    # Use str as return type
    manual = true

[[object]]
name = "Gst.Element"
status = "generate"
manual_traits = ["ElementExtManual"]

    # Manual implementation provides associated functions on `Element`,
    # but gir considers these methods on `ElementExtManual` in the docs.
    [[object.function]]
    name = "link_many"
    manual = true
    [[object.function]]
    name = "unlink_many"
    manual = true
    [[object.function]]
    name = "register"
    manual = true

    [[object.function]]
    name = "call_async"
    # more specific closure type possible
    manual = true

    [[object.function]]
    name = "set_base_time"
        [[object.function.parameter]]
        name = "time"
        mandatory = true

    [[object.function]]
    name = "get_current_running_time"
    # manual implementation also works for earlier versions
    manual = true

    [[object.function]]
    name = "get_current_clock_time"
    # manual implementation also works for earlier versions
    manual = true

    [[object.function]]
    name = "get_request_pad"
    # rename to more explicit name and avoid conflict with `request_pad`
    rename = "request_pad_simple"
    # Renamed version is not deprecated
    manual = true

    [[object.function]]
    name = "request_pad_simple"
    # see above
    manual = true

    [[object.function]]
    name = "post_message"
        [object.function.return]
        bool_return_is_error = "Failed to post message"

    [[object.function]]
    name = "add_pad"
        [object.function.return]
        bool_return_is_error = "Failed to add pad"

    [[object.function]]
    name = "remove_pad"
        [object.function.return]
        bool_return_is_error = "Failed to remove pad"

    # Manual implementations with better error reporting
    [[object.function]]
    name = "link"
    manual = true

    [[object.function]]
    name = "link_filtered"
    manual = true
        [[object.function.parameter]]
        name = "filter"
        # Can use `link` instead
        nullable = false

    [[object.function]]
    name = "link_pads"
    manual = true

    [[object.function]]
    name = "link_pads_filtered"
    manual = true
        [[object.function.parameter]]
        name = "filter"
        # Can use `link` instead
        nullable = false

    [[object.function]]
    name = "link_pads_full"
    manual = true

    [[object.function]]
    name = "set_clock"
        [object.function.return]
        bool_return_is_error = "Failed to set clock"

    [[object.function]]
    name = "sync_state_with_parent"
        [object.function.return]
        bool_return_is_error = "Failed to sync state with parent"

    [[object.function]]
    name = "query"
    # correct mutability
    manual = true

    [[object.function]]
    name = "send_event"
    # Pass by value
    manual = true

    [[object.function]]
    name = "get_context_unlocked"
    # Unsafe
    ignore = true

    [[object.function]]
    name = "add_property_deep_notify_watch"
    # ulong
    manual = true

    [[object.function]]
    name = "add_property_notify_watch"
    # ulong
    manual = true

    [[object.function]]
    name = "remove_property_notify_watch"
    # ulong
    manual = true

    [[object.function]]
    name = "query_duration"
    # formatted value
    manual = true

    [[object.function]]
    name = "query_position"
    # formatted value
    manual = true

    [[object.function]]
    name = "query_convert"
    # formatted value
    manual = true

    [[object.function]]
    name = "seek"
    # formatted value
    manual = true

    [[object.function]]
    name = "seek_simple"
    # formatted value
    manual = true

    [[object.function]]
    name = "state_change_return_get_name"
    # Wrong place
    ignore = true

    [[object.function]]
    name = "state_get_name"
    # Wrong place
    ignore = true

    [[object.function]]
    name = "get_metadata"
    # better manual function
    manual = true

    [[object.function]]
    name = "get_pad_template"
    # better manual function
    manual = true

    [[object.function]]
    name = "get_pad_template_list"
    # better manual function
    manual = true

    # Limited subset of `MessageType`,
    # see `ElementMessageType`.
    [[object.function]]
    name = "message_full"
    manual = true
    [[object.function]]
    name = "message_full_with_details"
    manual = true

    # Return iterators
    [[object.function]]
    name = "iterate_pads"
    manual = true
    [[object.function]]
    name = "iterate_sink_pads"
    manual = true
    [[object.function]]
    name = "iterate_src_pads"
    manual = true

    [[object.function]]
    name = "type_set_skip_documentation"
    # Needs integration into subclassing infrastructure
    ignore = true

    [[object.function]]
    name = "decorate_stream_id_printf"
    # Varargs
    ignore = true
    [[object.function]]
    name = "decorate_stream_id_printf_valist"
    # Varargs
    ignore = true

[[object]]
name = "Gst.ElementFactory"
status = "generate"
final_type = true
    [[object.function]]
    name = "create"
    rename = "create_with_name"
    manual = true

    [[object.function]]
    name = "make"
    rename = "make_with_name"
    manual = true

    [[object.function]]
    name = "create_full"
    # varargs
    ignore = true

    [[object.function]]
    name = "create_valist"
    # varargs
    ignore = true

    [[object.function]]
    name = "create_with_properties"
    # separate name/value arrays need to be merged
    manual = true

    [[object.function]]
    name = "make_full"
    # varargs
    ignore = true

    [[object.function]]
    name = "make_valist"
    # varargs
    ignore = true

    [[object.function]]
    name = "make_with_properties"
    # separate name/value arrays need to be merged
    manual = true

    [[object.function]]
    name = "get_static_pad_templates"
    # Use glib::List as return type
    manual = true

    [[object.function]]
    name = "list_is_type"
    rename = "has_type"
    # Renamed flags type
    manual = true

    [[object.function]]
    name = "list_filter"
    # can_{sink,src}_{all,any}_caps() around an iterator is the same
    ignore = true

    [[object.function]]
    name = "list_get_elements"
    rename = "factories_with_type"
    # Use glib::List as return type
    manual = true

    [[object.function]]
    name = "get_metadata"
    # Use str as return type
    manual = true

    [[object.function]]
    name = "can_sink_all_caps"
    # Use &CapsRef
    manual = true

    [[object.function]]
    name = "can_src_all_caps"
    # Use &CapsRef
    manual = true

    [[object.function]]
    name = "can_sink_any_caps"
    # Use &CapsRef
    manual = true

    [[object.function]]
    name = "can_src_any_caps"
    # Use &CapsRef
    manual = true

[[object]]
name = "Gst.ElementFactoryListType"
status = "manual"
conversion_type = "scalar"

[[object]]
name = "Gst.ElementFlags"
status = "generate"
    [[object.member]]
    name = "last"
    ignore = true

[[object]]
name = "Gst.Event"
status = "manual"
ref_mode = "ref"

    [[object.function]]
    name = "new_caps"
    # Moved to CapsBuilder::new()
    ignore = true

    [[object.function]]
    name = "new_qos"
    # Moved to QosBuilder::new()
    ignore = true

    [[object.function]]
    name = "new_seek"
    # Moved to SeekBuilder::new()
    ignore = true

    [[object.function]]
    name = "parse_stream"
    # Moved to StreamStart::stream()
    ignore = true

    [[object.function]]
    name = "parse_stream_start"
    # Moved to StreamStart::stream_id()
    ignore = true

[[object]]
name = "Gst.EventType"
status = "generate"
    [[object.function]]
    name = "to_sticky_ordering"
    # handle this manually via the `PartialOrd` function
    ignore = true
    [[object.derive]]
    name = "Debug, PartialEq, Eq, Hash"
    [[object.member]]
    name = "instant_rate_change"
    version = "1.18"
    [[object.member]]
    name = "instant_rate_sync_time"
    version = "1.18"

[[object]]
name = "Gst.FlowReturn"
# mapping unknown values to defaults
status = "manual"
must_use = true
exhaustive = true
    [object.conversion_type]
    variant = "Result"
    ok_type = "FlowSuccess"
    err_type = "FlowError"

[[object]]
name = "Gst.Format"
status = "generate"
    [[object.derive]]
    name = "serde::Serialize, serde::Deserialize"
    cfg_condition = "feature = \"serde\""
    [[object.derive]]
    name = "Debug, PartialEq, Eq, PartialOrd, Ord, Hash"
    [[object.function]]
    name = "register"
    # Needs manual work
    ignore = true

[[object]]
name = "Gst.GhostPad"
status = "generate"
    [[object.function]]
    name = "set_target"
        [object.function.return]
        bool_return_is_error = "Failed to set target"

    [[object.function]]
    name = "new"
    rename = "with_target"
    manual = true

    [[object.function]]
    name = "new_no_target"
    rename = "new"
    manual = true

    [[object.function]]
    name = "new_from_template"
    rename = "from_template_with_target"
    manual = true

    [[object.function]]
    name = "new_no_target_from_template"
    rename = "from_template"
    manual = true

    [[object.function]]
    name = "construct"
    ignore = true

    [[object.function]]
    name = "activate_mode_default"
    # wrong instance type
    manual = true

    [[object.function]]
    name = "internal_activate_mode_default"
    # wrong instance type
    manual = true

[[object]]
name = "Gst.LibraryError"
status = "generate"
    [[object.member]]
    name = "num_errors"
    ignore = true

[[object]]
name = "Gst.Memory"
status = "manual"

    [[object.function]]
    name = "map"
    # Readable and writable variant dealing with mutability
    # Non-into variants available under MemoryRef
    rename = "into_mapped_memory_readable"

    [[object.function]]
    name = "unmap"
    ignore = true

[[object]]
name = "Gst.MemoryFlags"
status = "generate"
    [[object.member]]
    name = "last"
    ignore = true

[[object]]
name = "Gst.Message"
status = "manual"
ref_mode = "ref"

[[object]]
name = "Gst.MetaFlags"
status = "generate"
    [[object.member]]
    name = "none"
    ignore = true
    [[object.member]]
    name = "last"
    ignore = true

[[object]]
name = "Gst.Object"
# For renaming the trait...
status = "generate"
trait_name = "GstObjectExt"
    [[object.function]]
    name = "set_name"
    # Don't allow changing the name at random times
    ignore = true

    [[object.property]]
    name = "name"
    # There are accessor functions for this
    ignore = true

    [[object.function]]
    name = "ref_sink"
    # Takes a raw pointer
    ignore = true

    [[object.function]]
    name = "get_name"
        [object.function.return]
        # Nullable state only occurs during instance init and finalize
        # which cannot be observed from Rust
        nullable = false

    [[object.function]]
    name = "set_parent"
        [object.function.return]
        bool_return_is_error = "Failed to set parent object"

    [[object.function]]
    name = "sync_values"
        [[object.function.parameter]]
        name = "timestamp"
        mandatory = true
        [object.function.return]
        bool_return_is_error = "Failed to sync values"

    [[object.function]]
    name = "value"
        [[object.function.parameter]]
        name = "timestamp"
        mandatory = true

    [[object.function]]
    name = "get_g_value_array"
    ignore = true

    [[object.function]]
    name = "add_control_binding"
    [object.function.return]
    bool_return_is_error = "Failed to add control binding"

[[object]]
name = "Gst.ObjectFlags"
status = "generate"
    [[object.member]]
    name = "last"
    ignore = true

[[object]]
name = "Gst.Pad"
status = "generate"
manual_traits = ["PadExtManual"]
    [[object.function]]
    name = "link_maybe_ghosting"
        [object.function.return]
        bool_return_is_error = "Failed to link pads, possibly ghosting"

    [[object.function]]
    name = "link_maybe_ghosting_full"
        [object.function.return]
        bool_return_is_error = "Failed to link pads, possibly ghosting"

    [[object.function]]
    name = "unlink"
        [object.function.return]
        bool_return_is_error = "Failed to unlink pad"

    [[object.function]]
    name = "pause_task"
        [object.function.return]
        bool_return_is_error = "Failed to pause pad task"

    [[object.function]]
    name = "stop_task"
        [object.function.return]
        bool_return_is_error = "Failed to stop pad task"

    [[object.function]]
    name = "set_active"
        [object.function.return]
        bool_return_is_error = "Failed to activate pad"

    [[object.function]]
    name = "activate_mode"
        [object.function.return]
        bool_return_is_error = "Failed to activate mode pad"

    [[object.function]]
    name = "remove_probe"
    # Don't use a ulong
    manual = true

    [[object.function]]
    name = "pull_range"
    # Buffer can be NULL
    manual = true

    [[object.function]]
    name = "get_range"
    # Buffer can be NULL
    manual = true

    [[object.function]]
    name = "get_last_flow_return"
    # Use Result<FlowSuccess, FlowError>
    rename = "last_flow_result"

    [[object.function]]
    name = "query"
    # Correct mutability
    manual = true

    [[object.function]]
    name = "peer_query"
    # Correct mutability
    manual = true

    [[object.function]]
    name = "query_default"
    # Correct mutability
    manual = true

    [[object.function]]
    name = "proxy_query_caps"
    # Correct mutability
    manual = true

    [[object.function]]
    name = "proxy_query_accept_caps"
    # Correct mutability
    manual = true

    [[object.function]]
    name = "event_default"
    # Pass by value
    manual = true

    [[object.function]]
    name = "push_event"
    # Pass by value
    manual = true

    [[object.function]]
    name = "send_event"
    # Pass by value
    manual = true

    [[object.function]]
    name = "new"
    # Also has builder()
    manual = true

    [[object.function]]
    name = "new_from_template"
    # Also has builder_from_template()
    rename = "from_template"
    manual = true

    [[object.function]]
    name = "new_from_static_template"
    # Also has builder_from_static_template()
    rename = "from_static_template"
    manual = true

    [[object.function]]
    name = "query_duration"
    # formatted value
    manual = true

    [[object.function]]
    name = "query_position"
    # formatted value
    manual = true

    [[object.function]]
    name = "query_convert"
    # formatted value
    manual = true

    [[object.function]]
    name = "peer_query_duration"
    # formatted value
    manual = true

    [[object.function]]
    name = "peer_query_position"
    # formatted value
    manual = true

    [[object.function]]
    name = "peer_query_convert"
    # formatted value
    manual = true

    [[object.function]]
    name = "link_get_name"
    # Wrong place
    manual = true

    [[object.function]]
    pattern = "set_.*_function_full"
    # More specific closure trait bounds possible
    manual = true

    [[object.function]]
    name = "start_task"
    # More specific closure trait bounds possible
    manual = true

    [[object.function]]
    name = "sticky_events_foreach"
    # Complex closure argument handling
    manual = true

    [[object.function]]
    name = "get_sticky_event"
    # More convenient API
    manual = true

    [[object.function]]
    name = "add_probe"
    # Complex closure argument handling
    manual = true

    [[object.property]]
    name = "template"
    # Has a proper getter
    ignore = true

    [[object.property]]
    name = "caps"
    # Same as `current_caps()`
    generate = ["notify"]

[[object]]
name = "Gst.PadDirection"
status = "generate"
exhaustive = true
    [[object.derive]]
    name = "serde::Serialize, serde::Deserialize"
    cfg_condition = "feature = \"serde\""
    [[object.derive]]
    name = "Debug, PartialEq, Eq, PartialOrd, Ord, Hash"

[[object]]
name = "Gst.PadFlags"
status = "generate"
    [[object.member]]
    name = "last"
    ignore = true

[[object]]
name = "Gst.PadLinkCheck"
status = "generate"
    [[object.member]]
    name = "nothing"
    ignore = true

[[object]]
# mapping unknown values to default
name = "Gst.PadLinkReturn"
status = "manual"
must_use = true
exhaustive = true
    [object.conversion_type]
    variant = "Result"
    ok_type = "PadLinkSuccess"
    err_type = "PadLinkError"

[[object]]
name = "Gst.PadMode"
status = "generate"
exhaustive = true

[[object]]
name = "Gst.PadPresence"
status = "generate"
exhaustive = true
    [[object.derive]]
    name = "serde::Serialize, serde::Deserialize"
    cfg_condition = "feature = \"serde\""
    [[object.derive]]
    name = "Debug, PartialEq, Eq, PartialOrd, Ord, Hash"

[[object]]
name = "Gst.PadProbeReturn"
status = "generate"
exhaustive = true

[[object]]
name = "Gst.PadProbeType"
status = "generate"
    [[object.member]]
    name = "invalid"
    ignore = true

[[object]]
name = "Gst.PadTemplate"
status = "generate"
final_type = true
    [[object.function]]
    name = "new"
        [object.function.return]
        nullable_return_is_error = "Failed to create pad template"

    [[object.function]]
    name = "new_with_gtype"
        [object.function.return]
        nullable_return_is_error = "Failed to create pad template"

    [[object.function]]
    name = "new_from_static_pad_template_with_gtype"
    # static pad template manual
    manual = true

    [[object.function]]
    name = "get_caps"
    # directly access the field
    manual = true

    [[object.function]]
    name = "set_documentation_caps"
    # builder
    manual = true

    [[object.function]]
    name = "get_documentation_caps"
    # directly access the field
    manual = true

    [[object.property]]
    name = "name-template"
    # directly access the field and borrow the string
    manual = true

    [[object.property]]
    name = "direction"
    # directly access the field
    manual = true

    [[object.property]]
    name = "presence"
    # directly access the field
    manual = true

    [[object.property]]
    name = "gtype"
    # directly access the field
    manual = true

[[object]]
name = "Gst.ParseContext"
status = "manual"
ref_mode = "ref-mut"

[[object]]
name = "Gst.ParseFlags"
status = "generate"
    [[object.member]]
    name = "none"
    ignore = true

[[object]]
name = "Gst.Pipeline"
status = "generate"
    [[object.function]]
    name = "new"
    # Remove the optional `name` argument in favor of using the builder
    manual = true

    [[object.function]]
    name = "get_delay"
        [object.function.return]
        mandatory = true

    [[object.function]]
    name = "set_delay"
        [[object.function.parameter]]
        name = "delay"
        mandatory = true

    [[object.function]]
    name = "get_clock"
    # useless function that is equal to the GstElement one
    ignore = true

    [[object.function]]
    name = "set_clock"
    # useless function that is equal to the GstElement one
    ignore = true

    [[object.function]]
    name = "get_bus"
    # useless function that is equal to the GstElement one
    ignore = true

[[object]]
name = "Gst.PipelineFlags"
status = "generate"
    [[object.member]]
    name = "last"
    ignore = true

[[object]]
name = "Gst.Plugin"
status = "generate"
final_type = true

    [[object.function]]
    pattern = "register_static.*"
    # Needs manual implementation
    ignore = true

    [[object.function]]
    name = "list_free"
    # useless and unsafe
    ignore = true

    [[object.function]]
    name = "get_cache_data"
    # structure ref
    manual = true

    [[object.function]]
    name = "load"
        [object.function.return]
        nullable_return_is_error = "Failed to load plugin"

    [[object.function]]
    name = "load_by_name"
        [object.function.return]
        nullable_return_is_error = "Failed to load plugin"

    [[object.function]]
    name = "get_name"
    rename = "plugin_name"

[[object]]
name = "Gst.PluginDependencyFlags"
status = "generate"
    [[object.member]]
    name = "none"
    ignore = true

[[object]]
name = "Gst.PluginFeature"
status = "generate"
manual_traits = ["PluginFeatureExtManual"]
    [[object.function]]
    pattern = "list_.*"
    ignore = true

    [[object.function]]
    name = "rank_compare_func"
    ignore = true

    [[object.function]]
    name = "get_rank"
    manual = true

    [[object.function]]
    name = "set_rank"
    manual = true

    [[object.function]]
    name = "load"
    manual = true

[[object]]
name = "Gst.Preset"
status = "generate"

    [[object.function]]
    name = "set_app_dir"
        [object.function.return]
        bool_return_is_error = "Failed to set app preset directory"

    [[object.function]]
    name = "delete_preset"
        [object.function.return]
        bool_return_is_error = "Failed to delete preset"

    [[object.function]]
    name = "load_preset"
        [object.function.return]
        bool_return_is_error = "Failed to load preset"

    [[object.function]]
    name = "save_preset"
        [object.function.return]
        bool_return_is_error = "Failed to save preset"

    [[object.function]]
    name = "rename_preset"
        [object.function.return]
        bool_return_is_error = "Failed to rename preset"

    [[object.function]]
    name = "set_meta"
        [object.function.return]
        bool_return_is_error = "Failed to set preset meta"

[[object]]
name = "Gst.Promise"
status = "manual"
ref_mode = "ref"

[[object]]
name = "Gst.ProxyPad"
status = "generate"
manual_traits = ["ProxyPadExtManual"]

    [[object.function]]
    name = "chain_default"
    # Buffer move
    manual = true

    [[object.function]]
    name = "chain_list_default"
    # Buffer move
    manual = true

    [[object.function]]
    name = "getrange_default"
    # Buffer move
    manual = true

[[object]]
name = "Gst.Query"
status = "manual"
ref_mode = "ref"

[[object]]
name = "Gst.Registry"
status = "generate"
final_type = true

    [[object.function]]
    pattern = "fork_.*"
    ignore = true

    [[object.function]]
    name = "add_feature"
        [object.function.return]
        bool_return_is_error = "Failed to add feature"

    [[object.function]]
    name = "add_plugin"
        [object.function.return]
        bool_return_is_error = "Failed to add plugin"

    [[object.function]]
    name = "feature_filter"
    rename = "features_filtered"
    # Use glib::List as return type
    manual = true

    [[object.function]]
    name = "get_feature_list"
    rename = "features"
    # Use glib::List as return type
    manual = true

    [[object.function]]
    name = "get_feature_list_by_plugin"
    rename = "features_by_plugin"
    # Use glib::List as return type
    manual = true

    [[object.function]]
    name = "get_plugin_list"
    rename = "plugins"
    # Use glib::List as return type
    manual = true

    [[object.function]]
    name = "plugin_filter"
    rename = "plugins_filtered"
    # Use glib::List as return type
    manual = true

[[object]]
name = "Gst.ResourceError"
status = "generate"
    [[object.member]]
    name = "num_errors"
    ignore = true

[[object]]
name = "Gst.Sample"
status = "manual"
ref_mode = "ref"

[[object]]
name = "Gst.SeekFlags"
status = "generate"
    [[object.member]]
    name = "trickmode_forward_predicted"
    version = "1.18"
    [[object.member]]
    name = "instant_rate_change"
    version = "1.18"
    [[object.member]]
    name = "none"
    ignore = true

[[object]]
name = "Gst.SeekType"
status = "generate"
exhaustive = true

[[object]]
name = "Gst.SegmentFlags"
status = "generate"
    [[object.member]]
    name = "trickmode_forward_predicted"
    version = "1.18"
    [[object.member]]
    name = "none"
    ignore = true

[[object]]
name = "Gst.SerializeFlags"
status = "generate"
    [[object.member]]
    name = "strict"
    # Changes nullability of gst_structure_serialize() so moved to a
    # separate function instead
    ignore = true

[[object]]
name = "Gst.StackTraceFlags"
status = "generate"
    [[object.member]]
    name = "none"
    ignore = true

[[object]]
name = "Gst.State"
status = "generate"
exhaustive = true
    [[object.derive]]
    name = "serde::Serialize, serde::Deserialize"
    cfg_condition = "feature = \"serde\""
    [[object.derive]]
    name = "Debug, PartialEq, Eq, PartialOrd, Ord, Hash"

[[object]]
name = "Gst.StateChange"
status = "generate"
exhaustive = true

[[object]]
name = "Gst.StateChangeReturn"
status = "generate"
must_use = true
exhaustive = true
    [object.conversion_type]
    variant = "Result"
    ok_type = "StateChangeSuccess"
    err_type = "StateChangeError"

[[object]]
name = "Gst.Stream"
status = "generate"
final_type = true

[[object]]
name = "Gst.StreamCollection"
status = "generate"
final_type = true
    [[object.function]]
    name = "new"
    # Manual builder pattern
    manual = true

    [[object.function]]
    name = "add_stream"
    # Ignore return value which is always `true`
    manual = true

    [[object.property]]
    name = "upstream-id"
    generate = ["get"]

[[object]]
name = "Gst.StreamError"
status = "generate"
    [[object.member]]
    name = "num_errors"
    ignore = true

[[object]]
name = "Gst.StreamFlags"
status = "generate"
    [[object.member]]
    name = "none"
    ignore = true

[[object]]
name = "Gst.Structure"
status = "manual"
ref_mode = "ref"
    # Functions moved to `StructureRef`
    [[object.function]]
    name = "set"
    ignore = true
    [[object.function]]
    name = "set_value"
    ignore = true
    [[object.function]]
    name = "get_value"
    ignore = true

    [[object.function]]
    name = "id_get_value"
    rename = "value_by_quark"
    ignore = true
    [[object.function]]
    name = "take_value"
    rename = "set_value"
    ignore = true
    [[object.function]]
    name = "id_take_value"
    rename = "set_value_by_quark"
    ignore = true
    [[object.function]]
    name = "get_name"
    rename = "name"
    ignore = true
    [[object.function]]
    name = "get_name_id"
    rename = "name_quark"
    ignore = true
    [[object.function]]
    name = "set_name"
    ignore = true

    [[object.function]]
    name = "has_field"
    ignore = true
    [[object.function]]
    name = "has_field_with_typed"
    rename = "has_field_with_type"
    ignore = true
    [[object.function]]
    name = "id_has_field"
    rename = "has_field_by_quark"
    ignore = true
    [[object.function]]
    name = "id_has_field_typed"
    rename = "has_field_with_type_by_quark"
    ignore = true
    [[object.function]]
    name = "remove_field"
    ignore = true
    [[object.function]]
    name = "remove_fields"
    # Repeatedly call remove_field()
    ignore = true
    [[object.function]]
    name = "remove_all_fields"
    ignore = true
    [[object.function]]
    name = "get_nth_field_name"
    ignore = true
    [[object.function]]
    name = "n_fields"
    ignore = true
    [[object.function]]
    name = "can_intersect"
    ignore = true
    [[object.function]]
    name = "intersect"
    ignore = true
    [[object.function]]
    name = "is_subset"
    ignore = true

    [[object.function]]
    name = "fixate"
    ignore=true
    [[object.function]]
    name = "fixate_field"
    ignore=true
    [[object.function]]
    name = "fixate_field_boolean"
    ignore=true
    [[object.function]]
    name = "fixate_field_string"
    ignore=true
    [[object.function]]
    name = "fixate_field_nearest_double"
    ignore=true
    [[object.function]]
    name = "fixate_field_nearest_fraction"
    ignore=true
    [[object.function]]
    name = "fixate_field_nearest_int"
    ignore=true

    # Not implemented
    [[object.function]]
    name = "set_parent_refcount"
    ignore = true

[[object]]
name = "Gst.TagFlag"
status = "generate"
    [[object.member]]
    name = "count"
    ignore = true

[[object]]
name = "Gst.TagList"
status = "manual"
ref_mode = "ref"

[[object]]
name = "Gst.TagMergeMode"
status = "generate"
    [[object.member]]
    name = "count"
    ignore = true

[[object]]
name = "Gst.TagScope"
status = "generate"
    [[object.derive]]
    name = "serde::Serialize, serde::Deserialize"
    cfg_condition = "feature = \"serde\""
    [[object.derive]]
    name = "Debug, PartialEq, Eq, PartialOrd, Ord, Hash"

[[object]]
name = "Gst.TagSetter"
status = "generate"
manual_traits = ["TagSetterExtManual"]
    [[object.function]]
    name = "add_tag_value"
    manual = true

    [[object.function]]
    name = "add_tags"
    # Takes a raw pointer
    ignore = true

[[object]]
name = "Gst.Task"
status = "generate"
    # Need work
    [[object.function]]
    name = "new"
    manual = true
    [[object.function]]
    name = "set_enter_callback"
    manual = true
    [[object.function]]
    name = "set_leave_callback"
    manual = true
    [[object.function]]
    name = "set_lock"
    manual = true

    [[object.function]]
    name = "start"
        [object.function.return]
        bool_return_is_error = "Failed to start task"

    [[object.function]]
    name = "stop"
        [object.function.return]
        bool_return_is_error = "Failed to stop task"

    [[object.function]]
    name = "pause"
        [object.function.return]
        bool_return_is_error = "Failed to pause task"

    [[object.function]]
    name = "resume"
        [object.function.return]
        bool_return_is_error = "Failed to resume task"

    [[object.function]]
    name = "join"
        [object.function.return]
        bool_return_is_error = "Failed to join task"

    [[object.function]]
    name = "set_state"
        [object.function.return]
        bool_return_is_error = "Failed to set task state"

[[object]]
name = "Gst.TaskPool"
status = "generate"
manual_traits = ["TaskPoolExtManual"]
    [[object.function]]
    name = "push"
    manual = true

    # Moved to TaskHandle
    [[object.function]]
    name = "join"
    ignore = true
    [[object.function]]
    name = "dispose_handle"
    ignore = true

[[object]]
name = "Gst.Toc"
status = "manual"
ref_mode = "ref"

[[object]]
name = "Gst.TocEntry"
status = "manual"
ref_mode = "ref"

[[object]]
name = "Gst.TocEntryType"
status = "generate"
    [[object.derive]]
    name = "serde::Serialize, serde::Deserialize"
    cfg_condition = "feature = \"serde\""
    [[object.derive]]
    name = "Debug, PartialEq, Eq, PartialOrd, Ord, Hash"

[[object]]
name = "Gst.TocLoopType"
status = "generate"
    [[object.derive]]
    name = "serde::Serialize, serde::Deserialize"
    cfg_condition = "feature = \"serde\""
    [[object.derive]]
    name = "Debug, PartialEq, Eq, PartialOrd, Ord, Hash"

[[object]]
name = "Gst.TocScope"
status = "generate"
    [[object.derive]]
    name = "serde::Serialize, serde::Deserialize"
    cfg_condition = "feature = \"serde\""
    [[object.derive]]
    name = "Debug, PartialEq, Eq, PartialOrd, Ord, Hash"

[[object]]
name = "Gst.Tracer"
status = "generate"
    [[object.function]]
    name = "register"
    # Manual implementation as inherent to the type.
    ignore = true

[[object]]
name = "Gst.TracerFactory"
status = "generate"

    [[object.function]]
    name = "get_list"
    rename = "factories"
    # Use glib::List as return type
    manual = true

[[object]]
name = "Gst.TypeFindFactory"
status = "generate"
final_type = true

    [[object.function]]
    name = "call_function"
    # Set up native functions in `TypeFind`, calling into trait argument
    manual = true

    [[object.function]]
    name = "get_list"
    rename = "factories"
    # Use glib::List as return type
    manual = true

[[object]]
name = "Gst.TypeFindProbability"
status = "generate"
    [[object.derive]]
    name = "Debug"

[[object]]
name = "Gst.URIType"
status = "generate"
exhaustive = true
    [[object.derive]]
    name = "serde::Serialize, serde::Deserialize"
    cfg_condition = "feature = \"serde\""
    [[object.derive]]
    name = "Debug, PartialEq, Eq, PartialOrd, Ord, Hash"
