Struct gio::IOExtensionPoint

source ·
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

source

pub fn builder(name: impl Into<GString>) -> IOExtensionPointBuilder

Create a new builder for an extension point.

source

pub fn lookup(name: impl IntoGStr) -> Option<Self>

Looks up an existing extension point.

§name

the name of the extension point

§Returns

the #GIOExtensionPoint, or None if there is no registered extension point with the given name.

source

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.

source

pub fn extension_by_name(&self, name: impl IntoGStr) -> Option<IOExtension>

Finds a #GIOExtension for an extension point by name.

§name

the name of the extension to get

§Returns

the #GIOExtension for @self that has the given name, or None if there is no extension with that name

source

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

source

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

source§

fn clone(&self) -> IOExtensionPoint

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for IOExtensionPoint

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromGlibPtrNone<*mut _GIOExtensionPoint> for IOExtensionPoint

source§

impl PartialEq for IOExtensionPoint

source§

fn eq(&self, other: &IOExtensionPoint) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

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>

Transfer: none. Read more
source§

fn to_glib_container(&'a self) -> Stash<'a, P, Self>

Transfer: container. Read more
source§

fn to_glib_full(&self) -> P

Transfer: full. Read more
source§

impl Copy for IOExtensionPoint

source§

impl Eq for IOExtensionPoint

source§

impl StructuralPartialEq for IOExtensionPoint

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> CloneToUninit for T
where T: Copy,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.