pub struct IOExtensionPoint(/* private fields */);
Expand description
An extension point provides a mechanism to extend the functionality of a library or application.
Each extension point is identified by a name, and it may optionally require that any implementation
must be of a certain type.
GIOExtensionPoint
provides a mechanism for modules to extend the
functionality of the library or application that loaded it in an
organized fashion.
An extension point is identified by a name, and it may optionally
require that any implementation must be of a certain type (or derived
thereof). Use [register()
][Self::register()] to register an
extension point, and [set_required_type()
][Self::set_required_type()] to
set a required type.
A module can implement an extension point by specifying the
[type@GObject.Type] that implements the functionality. Additionally, each
implementation of an extension point has a name, and a priority. Use
implement()
to implement an extension point.
⚠️ The following code is in c ⚠️
GIOExtensionPoint *ep;
// Register an extension point
ep = g_io_extension_point_register ("my-extension-point");
g_io_extension_point_set_required_type (ep, MY_TYPE_EXAMPLE);
⚠️ The following code is in c ⚠️
// Implement an extension point
G_DEFINE_TYPE (MyExampleImpl, my_example_impl, MY_TYPE_EXAMPLE)
g_io_extension_point_implement ("my-extension-point",
my_example_impl_get_type (),
"my-example",
10);
It is up to the code that registered the extension point how it uses the implementations that have been associated with it. Depending on the use case, it may use all implementations, or only the one with the highest priority, or pick a specific one by name.
To avoid opening all modules just to find out what extension points they implement, GIO makes use of a caching mechanism, see gio-querymodules. You are expected to run this command after installing a GIO module.
The GIO_EXTRA_MODULES
environment variable can be used to
specify additional directories to automatically load modules
from. This environment variable has the same syntax as the
PATH
. If two modules have the same base name in different
directories, then the latter one will be ignored. If additional
directories are specified GIO will load modules from the built-in
directory last.
Implementations§
Source§impl IOExtensionPoint
impl IOExtensionPoint
Sourcepub fn builder(name: impl Into<GString>) -> IOExtensionPointBuilder
pub fn builder(name: impl Into<GString>) -> IOExtensionPointBuilder
Create a new builder for an extension point.
Sourcepub fn extensions(&self) -> Vec<IOExtension>
pub fn extensions(&self) -> Vec<IOExtension>
Gets a list of all extensions that implement this extension point. The list is sorted by priority, beginning with the highest priority.
§Returns
a #GList of #GIOExtensions. The list is owned by GIO and should not be modified.
Sourcepub fn extension_by_name(&self, name: impl IntoGStr) -> Option<IOExtension>
pub fn extension_by_name(&self, name: impl IntoGStr) -> Option<IOExtension>
Sourcepub fn required_type(&self) -> Type
pub fn required_type(&self) -> Type
Gets the required type for @self.
§Returns
the #GType that all implementations must have,
or G_TYPE_INVALID
if the extension point has no required type
Sourcepub fn implement(
extension_point_name: impl IntoGStr,
type_: Type,
extension_name: impl IntoGStr,
priority: i32,
) -> Option<IOExtension>
pub fn implement( extension_point_name: impl IntoGStr, type_: Type, extension_name: impl IntoGStr, priority: i32, ) -> Option<IOExtension>
Registers @type_ as extension for the extension point with name @extension_point_name.
If @type_ has already been registered as an extension for this extension point, the existing #GIOExtension object is returned.
§extension_point_name
the name of the extension point
§type_
the #GType to register as extension
§extension_name
the name for the extension
§priority
the priority for the extension
§Returns
a #GIOExtension object for #GType
Trait Implementations§
Source§impl Clone for IOExtensionPoint
impl Clone for IOExtensionPoint
Source§fn clone(&self) -> IOExtensionPoint
fn clone(&self) -> IOExtensionPoint
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for IOExtensionPoint
impl Debug for IOExtensionPoint
Source§impl FromGlibPtrNone<*mut _GIOExtensionPoint> for IOExtensionPoint
impl FromGlibPtrNone<*mut _GIOExtensionPoint> for IOExtensionPoint
Source§unsafe fn from_glib_none(ptr: *mut GIOExtensionPoint) -> Self
unsafe fn from_glib_none(ptr: *mut GIOExtensionPoint) -> Self
Source§impl PartialEq for IOExtensionPoint
impl PartialEq for IOExtensionPoint
Source§impl<'a> ToGlibPtr<'a, *mut _GIOExtensionPoint> for &'a IOExtensionPoint
impl<'a> ToGlibPtr<'a, *mut _GIOExtensionPoint> for &'a IOExtensionPoint
type Storage = PhantomData<&'a IOExtensionPoint>
Source§fn to_glib_none(
&self,
) -> Stash<'a, *mut GIOExtensionPoint, &'a IOExtensionPoint>
fn to_glib_none( &self, ) -> Stash<'a, *mut GIOExtensionPoint, &'a IOExtensionPoint>
Source§fn to_glib_container(&'a self) -> Stash<'a, P, Self>
fn to_glib_container(&'a self) -> Stash<'a, P, Self>
Source§fn to_glib_full(&self) -> P
fn to_glib_full(&self) -> P
impl Copy for IOExtensionPoint
impl Eq for IOExtensionPoint
impl StructuralPartialEq for IOExtensionPoint
Auto Trait Implementations§
impl Freeze for IOExtensionPoint
impl RefUnwindSafe for IOExtensionPoint
impl !Send for IOExtensionPoint
impl !Sync for IOExtensionPoint
impl Unpin for IOExtensionPoint
impl UnwindSafe for IOExtensionPoint
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)