Library constructor
Library({})
Implementation
Library({
required String name,
String? description,
required List<Binding> bindings,
String? header,
bool sort = false,
bool generateForPackageObjectiveC = false,
StructPackingOverride? packingOverride,
Set<LibraryImport>? libraryImports,
}) {
_findBindings(bindings, sort);
/// Handle any declaration-declaration name conflicts and emit warnings.
final declConflictHandler = UniqueNamer({});
for (final b in this.bindings) {
_warnIfPrivateDeclaration(b);
_resolveIfNameConflicts(declConflictHandler, b);
}
// Override pack values according to config. We do this after declaration
// conflicts have been handled so that users can target the generated names.
if (packingOverride != null) {
for (final b in this.bindings) {
if (b is Struct && packingOverride.isOverriden(b.name)) {
b.pack = packingOverride.getOverridenPackValue(b.name);
}
}
}
// Seperate bindings which require lookup.
final lookupBindings = <LookUpBinding>[];
final nativeBindings = <LookUpBinding>[];
FfiNativeConfig? nativeConfig;
for (final binding in this.bindings.whereType<LookUpBinding>()) {
final nativeConfigForBinding = switch (binding) {
Func() => binding.ffiNativeConfig,
Global() => binding.nativeConfig,
_ => null,
};
// At the moment, all bindings share their native config.
nativeConfig ??= nativeConfigForBinding;
final usesLookup =
nativeConfigForBinding == null || !nativeConfigForBinding.enabled;
(usesLookup ? lookupBindings : nativeBindings).add(binding);
}
final noLookUpBindings =
this.bindings.whereType<NoLookUpBinding>().toList();
_writer = Writer(
lookUpBindings: lookupBindings,
ffiNativeBindings: nativeBindings,
nativeAssetId: nativeConfig?.assetId,
noLookUpBindings: noLookUpBindings,
className: name,
classDocComment: description,
header: header,
additionalImports: libraryImports,
generateForPackageObjectiveC: generateForPackageObjectiveC,
);
}