[options]
girs_dir = "gir-files"
library = "Gst"
version = "1.0"
min_cfg_version = "1.8"
target_path = "gstreamer"
work_mode = "normal"
concurrency = "send+sync"
generate_safety_asserts = true
single_version_file = true
generate_display_trait = false

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

generate = [
    "Gst.ClockTimeDiff",
    "Gst.State",
    "Gst.StateChange",
    "Gst.SeekType",
    "Gst.PadDirection",
    "Gst.PadPresence",
    "Gst.URIHandler",
    "Gst.URIType",
    "Gst.ElementFactoryListType",
    "Gst.BufferingMode",
    "Gst.CoreError",
    "Gst.ResourceError",
    "Gst.LibraryError",
    "Gst.StreamError",
    "Gst.PluginError",
    "Gst.ParseError",
    "Gst.URIError",
    "Gst.StructureChangeType",
    "Gst.StreamStatusType",
    "Gst.StreamType",
    "Gst.ProgressType",
    "Gst.BusSyncReply",
    "Gst.TagFlag",
    "Gst.TagMergeMode",
    "Gst.PadProbeReturn",
    "Gst.CapsIntersectMode",
    "Gst.PadMode",
    "Gst.SchedulingFlags",
    "Gst.QOSType",
    "Gst.TocSetter",
    "Gst.PluginFlags",
    "Gst.DebugLevel",
    "Gst.DebugColorFlags",
    "Gst.DebugGraphDetails",
    "Gst.TaskState",
    "Gst.PromiseResult",
    "Gst.ClockEntryType",
    "Gst.PluginAPIFlags",
]

manual = [
    "GLib.Error",
    "GLib.Source",
    "GLib.DateTime",
    "GObject.Object",
    "Gst.Segment",
    "Gst.StaticCaps",
    "Gst.StaticPadTemplate",
]

[[object]]
name = "Gst.Allocator"
status = "generate"
manual_traits = ["AllocatorExtManual"]

[[object]]
name = "Gst.Bin"
status = "generate"
trait_name = "GstBinExt"
    [[object.signal]]
    name = "do-latency"
    # Use Result<(), glib::BoolError>
    ignore = 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.member]]
    name = "streams_aware"
    version = "1.10"

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

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

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

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

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

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

    [[object.function]]
    name = "remove_watch"
        [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.BufferFlags"
status = "generate"
    [[object.derive]]
    name = "Serialize, Deserialize"
    cfg_condition = "feature = \"ser_de\""

    [[object.member]]
    name = "non_droppable"
    version = "1.14"
    [[object.member]]
    name = "last"
    ignore = true

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

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

[[object]]
name = "Gst.ChildProxy"
status = "generate"
manual_traits = ["ChildProxyExtManual"]

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

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

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

[[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.SegmentFlags"
status = "generate"
    [[object.derive]]
    name = "Serialize, Deserialize"
    cfg_condition = "feature = \"ser_de\""
    [[object.member]]
    name = "trickmode_forward_predicted"
    version = "1.18"
    [[object.member]]
    name = "none"
    ignore = true

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

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

[[object]]
name = "Gst.TagSetter"
status = "generate"
manual_traits = ["TagSetterExtManual"]

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

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

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

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

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

[[object]]
name = "Gst.EventType"
status = "generate"
    [[object.derive]]
    name = "Debug, PartialEq, Eq, Hash"
    [[object.member]]
    name = "select_streams"
    version = "1.10"
    [[object.member]]
    name = "stream_selection"
    version = "1.10"
    [[object.member]]
    name = "stream_group_done"
    version = "1.10"
    [[object.member]]
    name = "instant_rate_change"
    version = "1.18"
    [[object.member]]
    name = "instant_rate_sync_time"
    version = "1.18"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[[object]]
name = "Gst.Clock"
status = "generate"
manual_traits = ["ClockExtManual"]
    [[object.function]]
    name = "set_master"
        [object.function.return]
        bool_return_is_error = "Failed to set master clock"

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

    [[object.function]]
    name = "adjust_with_calibration"
    # Useless clock parameter
    ignore = true

    [[object.function]]
    name = "unadjust_with_calibration"
    # Useless clock parameter
    ignore = true

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

[[object]]
name = "Gst.SystemClock"
status = "generate"
    [[object.function]]
    name = "obtain"
        [object.function.return]
        nullable = false

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

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

[[object]]
name = "Gst.Element"
status = "generate"
manual_traits = ["ElementExtManual"]
    [[object.function]]
    name = "make_from_uri"
        [object.function.return]
        # It is already a Result
        nullable = false

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

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

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

    [[object.function]]
    name = "post_message"
    # takes ownership of message
    ignore = true

    [[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"

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

    [[object.function]]
    name = "link_filtered"
        [object.function.return]
        bool_return_is_error = "Failed to link elements"

    [[object.function]]
    name = "link_pads"
        [object.function.return]
        bool_return_is_error = "Failed to link pads"

    [[object.function]]
    name = "link_pads_filtered"
        [object.function.return]
        bool_return_is_error = "Failed to link pads"

    [[object.function]]
    name = "link_pads_full"
        [object.function.return]
        bool_return_is_error = "Failed to link pads"

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

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

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

    [[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 = "change_state"
    # Use Result<StateChangeSuccess, StateChangeError>
    ignore = true

    [[object.function]]
    name = "continue_state"
    # Use Result<StateChangeSuccess, StateChangeError>
    ignore = true

    [[object.function]]
    name = "get_state"
    # Use Result<StateChangeSuccess, StateChangeError>
    ignore = true

    [[object.function]]
    name = "set_state"
    # Use Result<StateChangeSuccess, StateChangeError>
    ignore = true

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

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

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

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

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

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

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

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

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

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

    [[object.function]]
    name = "seek_simple"
    # formatted value
    ignore = 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
    ignore = true

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

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

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

[[object]]
name = "Gst.ElementFactory"
status = "generate"
final_type = true
    [[object.function]]
    name = "create"
        [object.function.return]
        nullable_return_is_error = "Failed to create element from factory"

    [[object.function]]
    name = "make"
        [object.function.return]
        nullable_return_is_error = "Failed to create element from factory name"

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

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

[[object]]
name = "Gst.DeviceProvider"
status = "generate"
manual_traits = ["DeviceProviderExtManual"]
    [[object.function]]
    name = "get_bus"
        [object.function.return]
        nullable = false

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

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

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

[[object]]
name = "Gst.DeviceMonitor"
status = "generate"
manual_traits = ["DeviceMonitorExtManual"]
    [[object.function]]
    name = "new"
    # Work-around for 1.14 switch from transfer-floating to transfer-full
    ignore = true

    [[object.function]]
    name = "add_filter"
    # Return Option<DeviceMonitorFilterId>
    ignore = true

    [[object.function]]
    name = "get_bus"
        [object.function.return]
        nullable = false

    [[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>
    ignore = true

[[object]]
name = "Gst.Device"
status = "generate"
    [[object.function]]
    name = "get_display_name"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_device_class"
        [object.function.return]
        nullable = false

    [[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.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 = "get_name"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_path_string"
        [object.function.return]
        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.return]
        bool_return_is_error = "Failed to sync values"

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

[[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]]
name = "Gst.PadProbeType"
status = "generate"
    [[object.member]]
    name = "invalid"
    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
    ignore = true

    [[object.function]]
    name = "chain"
    # Move buffer
    ignore = true

    [[object.function]]
    name = "push"
    # Move buffer
    ignore = true

    [[object.function]]
    name = "chain_list"
    # Move buffer
    ignore = true

    [[object.function]]
    name = "push_list"
    # Move buffer
    ignore = true

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

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

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

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

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

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

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

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

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

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

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

    [[object.function]]
    name = "link"
    # Use Result<PadLinkSuccess, PadLinkError>
    ignore = true

    [[object.function]]
    name = "link_full"
    # Use Result<PadLinkSuccess, PadLinkError>
    ignore = true

    [[object.function]]
    name = "store_sticky_event"
    # Use Result<FlowSuccess, FlowError>
    ignore = true

    [[object.function]]
    name = "new"
    # Builder
    ignore = true

    [[object.function]]
    name = "new_from_template"
    # Builder
    ignore = true

    [[object.function]]
    name = "new_from_static_template"
    # Builder
    ignore = true

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

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

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

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

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

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

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

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

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

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

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

    [[object.property]]
    name = "template"
    # Has a proper getter
    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
    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"
    ignore = true

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

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

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

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

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

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

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

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

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

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

[[object]]
name = "Gst.Stream"
status = "generate"
final_type = true
    [[object.function]]
    name = "new"
    # Work-around for 1.14 switch from transfer-floating to transfer-full
    ignore = true

    [[object.property]]
    name = "caps"
    version = "1.10"

    [[object.property]]
    name = "stream-flags"
    version = "1.10"

    [[object.property]]
    name = "stream-id"
    version = "1.10"

    [[object.property]]
    name = "stream-type"
    version = "1.10"

    [[object.property]]
    name = "tags"
    version = "1.10"

[[object]]
name = "Gst.StreamCollection"
status = "generate"
final_type = true
    [[object.function]]
    name = "new"
    # Work-around for 1.14 switch from transfer-floating to transfer-full
    ignore = true

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

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

[[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 = "set_cache_data"
    # pass by value
    ignore = true

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

    [[object.function]]
    name = "get_description"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_name"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_license"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_origin"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_package"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_source"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_version"
        [object.function.return]
        nullable = false

    [[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]]
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"
    ignore = true

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

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

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

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

    [[object.function]]
    name = "get"
        [object.function.return]
        nullable = false

    [[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]]
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
    ignore = true

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

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

    [[object.function]]
    name = "release_buffer"
    # Takes ownership
    ignore = true

    [[object.function]]
    name = "new"
    # Work-around for 1.14 switch from transfer-floating to transfer-full
    ignore = true

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

[[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.*"
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]]
    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_bin_to_dot_data"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "version_string"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "parse_bin_from_description"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "parse_launch"
        [object.function.return]
        # Already a Result
        nullable = false

    [[object.function]]
    name = "parse_launchv"
        [object.function.return]
        # Already a Result
        nullable = false

    [[object.function]]
    name = "debug_get_stack_trace"
        [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_get_stack_trace"
    # 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]]
    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"
    # confusing return type
    ignore = true

[[object]]
name = "Gst.StateChangeReturn"
status = "generate"
must_use = true

[[object]]
name = "Gst.FlowReturn"
status = "generate"
must_use = true

[[object]]
name = "Gst.PadLinkReturn"
status = "generate"
must_use = true

[[object]]
name = "Gst.ClockReturn"
status = "generate"
must_use = true

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

    [[object.function]]
    name = "new"
        [object.function.return]
        nullable = true
        nullable_return_is_error = "Can't create DateTime"

    [[object.function]]
    name = "new_y"
        [object.function.return]
        nullable = true
        nullable_return_is_error = "Can't create DateTime"

    [[object.function]]
    name = "new_ym"
        [object.function.return]
        nullable = true
        nullable_return_is_error = "Can't create DateTime"

    [[object.function]]
    name = "new_ymd"
        [object.function.return]
        nullable = true
        nullable_return_is_error = "Can't create DateTime"

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

    [[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"
