core_foundation_sys/
plugin.rs

1// Copyright 2023 The Servo Project Developers. See the COPYRIGHT
2// file at the top-level directory of this distribution.
3//
4// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
5// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
6// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
7// option. This file may not be copied, modified, or distributed
8// except according to those terms.
9
10use std::os::raw::c_void;
11
12use crate::array::CFArrayRef;
13use crate::base::{Boolean, CFAllocatorRef, CFIndex, CFTypeID};
14use crate::bundle::{CFBundleRef, CFPlugInRef};
15use crate::string::CFStringRef;
16use crate::url::CFURLRef;
17use crate::uuid::CFUUIDRef;
18
19#[repr(C)]
20pub struct __CFPlugInInstance(c_void);
21pub type CFPlugInInstanceRef = *mut __CFPlugInInstance;
22
23pub type CFPlugInDynamicRegisterFunction = extern "C" fn(plugIn: CFPlugInRef);
24pub type CFPlugInUnloadFunction = extern "C" fn(plugIn: CFPlugInRef);
25pub type CFPlugInFactoryFunction =
26    extern "C" fn(allocator: CFAllocatorRef, typeUUID: CFUUIDRef) -> *mut c_void;
27
28pub type CFPlugInInstanceGetInterfaceFunction = extern "C" fn(
29    instance: CFPlugInInstanceRef,
30    interfaceName: CFStringRef,
31    ftbl: *mut *mut c_void,
32) -> Boolean;
33pub type CFPlugInInstanceDeallocateInstanceDataFunction = extern "C" fn(instanceData: *mut c_void);
34
35extern "C" {
36    /*
37     * CFPlugIn.h
38     */
39
40    /* CFPlugIn */
41    /* Information Property List Keys */
42    pub static kCFPlugInDynamicRegistrationKey: CFStringRef;
43    pub static kCFPlugInDynamicRegisterFunctionKey: CFStringRef;
44    pub static kCFPlugInUnloadFunctionKey: CFStringRef;
45    pub static kCFPlugInFactoriesKey: CFStringRef;
46    pub static kCFPlugInTypesKey: CFStringRef;
47
48    /* Creating Plug-ins */
49    pub fn CFPlugInCreate(allocator: CFAllocatorRef, plugInURL: CFURLRef) -> CFPlugInRef;
50    pub fn CFPlugInInstanceCreate(
51        allocator: CFAllocatorRef,
52        factoryUUID: CFUUIDRef,
53        typeUUID: CFUUIDRef,
54    ) -> *mut c_void;
55
56    /* Registration */
57    pub fn CFPlugInRegisterFactoryFunction(
58        factoryUUID: CFUUIDRef,
59        func: CFPlugInFactoryFunction,
60    ) -> Boolean;
61    pub fn CFPlugInRegisterFactoryFunctionByName(
62        CfactoryUUID: CFUUIDRef,
63        plugIn: CFPlugInRef,
64        functionName: CFStringRef,
65    ) -> Boolean;
66    pub fn CFPlugInRegisterPlugInType(factoryUUID: CFUUIDRef, typeUUID: CFUUIDRef) -> Boolean;
67    pub fn CFPlugInUnregisterFactory(factoryUUID: CFUUIDRef) -> Boolean;
68    pub fn CFPlugInUnregisterPlugInType(factoryUUID: CFUUIDRef, typeUUID: CFUUIDRef) -> Boolean;
69
70    /* CFPlugIn Miscellaneous Functions */
71    pub fn CFPlugInAddInstanceForFactory(factoryID: CFUUIDRef);
72    pub fn CFPlugInFindFactoriesForPlugInType(typeUUID: CFUUIDRef) -> CFArrayRef;
73    pub fn CFPlugInFindFactoriesForPlugInTypeInPlugIn(
74        typeUUID: CFUUIDRef,
75        plugIn: CFPlugInRef,
76    ) -> CFArrayRef;
77    pub fn CFPlugInGetBundle(plugIn: CFPlugInRef) -> CFBundleRef;
78    pub fn CFPlugInGetTypeID() -> CFTypeID;
79    pub fn CFPlugInIsLoadOnDemand(plugIn: CFPlugInRef) -> Boolean;
80    pub fn CFPlugInRemoveInstanceForFactory(factoryID: CFUUIDRef);
81    pub fn CFPlugInSetLoadOnDemand(plugIn: CFPlugInRef, flag: Boolean);
82
83    /* CFPlugInInstance: deprecated */
84    pub fn CFPlugInInstanceCreateWithInstanceDataSize(
85        allocator: CFAllocatorRef,
86        instanceDataSize: CFIndex,
87        deallocateInstanceFunction: CFPlugInInstanceDeallocateInstanceDataFunction,
88        factoryName: CFStringRef,
89        getInterfaceFunction: CFPlugInInstanceGetInterfaceFunction,
90    ) -> CFPlugInInstanceRef;
91    pub fn CFPlugInInstanceGetFactoryName(instance: CFPlugInInstanceRef) -> CFStringRef;
92    pub fn CFPlugInInstanceGetInstanceData(instance: CFPlugInInstanceRef) -> *mut c_void;
93    pub fn CFPlugInInstanceGetInterfaceFunctionTable(
94        instance: CFPlugInInstanceRef,
95        interfaceName: CFStringRef,
96        ftbl: *mut *mut c_void,
97    ) -> Boolean;
98    pub fn CFPlugInInstanceGetTypeID() -> CFTypeID;
99}