pub struct FfiConfig {Show 14 fields
pub prefix: Option<String>,
pub error_style: String,
pub header_name: Option<String>,
pub lib_name: Option<String>,
pub visitor_callbacks: bool,
pub features: Option<Vec<String>>,
pub extra_features: Vec<String>,
pub serde_rename_all: Option<String>,
pub exclude_functions: Vec<String>,
pub exclude_types: Vec<String>,
pub capsule_types: HashMap<String, FfiCapsuleTypeConfig>,
pub rename_fields: HashMap<String, String>,
pub plugin_error_constructor: Option<String>,
pub target_dep_overrides: Vec<FfiTargetDepOverride>,
}Fields§
§prefix: Option<String>§error_style: String§header_name: Option<String>§lib_name: Option<String>Native library name for Go cgo/Java Panama/C# P/Invoke (e.g., “sample_pack_ffi”).
Defaults to {prefix}_ffi.
visitor_callbacks: boolIf true, generate visitor/callback FFI support.
features: Option<Vec<String>>§extra_features: Vec<String>Core-crate features that must be declared on the generated FFI crate so
that #[cfg(feature = "X")] gates in the FFI source compile cleanly under
RUSTFLAGS="-D warnings", but must NOT be enabled by default.
Use this for mutually-exclusive alternatives to a default feature — e.g. a
wasm-http HTTP backend that the FFI source references in
#[cfg(any(feature = "native-http", feature = "wasm-http"))] but which must
never be active alongside the default native-http. Each entry X emits a
X = ["<core-crate>/X"] line in [features] without adding X to default.
Defaults to empty — crates that don’t reference non-default core features in
their FFI #[cfg] gates can ignore this knob entirely.
serde_rename_all: Option<String>Override the serde rename_all strategy for JSON field names (e.g. “camelCase”, “snake_case”). When set, this takes priority over the IR type-level serde_rename_all.
exclude_functions: Vec<String>Functions to exclude from FFI binding generation.
exclude_types: Vec<String>Types to exclude from FFI binding generation.
capsule_types: HashMap<String, FfiCapsuleTypeConfig>Map of Rust type name -> capsule config for host-native Language passthrough.
Types listed here are NOT boxed into opaque *mut {Type} handles; instead the
generated C function returns the host runtime’s grammar pointer directly via
value.into_raw(). See FfiCapsuleTypeConfig. This is the foundation that the
Go, Java, C#, Swift, Dart, Zig, and Kotlin Android bindings build their host
Language wrappers on top of.
rename_fields: HashMap<String, String>Per-field name remapping for this language. Key is TypeName.field_name, value is the
desired binding field name. Applied after automatic keyword escaping.
plugin_error_constructor: Option<String>Rust expression used to construct an error value of this crate’s
error_type from a runtime String message inside generated FFI
trait-bridge plugin shims (plugin_impl_initialize, plugin_impl_shutdown).
The expression has access to a local variable msg: String containing
the underlying error message and is interpolated verbatim. Example
values:
# downstream whose error type has a struct variant with two fields:
plugin_error_constructor = """
sample_core::SampleCrateError::Plugin { message: msg, plugin_name: String::new() }
"""
# downstream whose error type implements `From<String>`:
plugin_error_constructor = "MyError::from(msg)"Defaults to None. When unset, the plugin shim still emits — backends
fall back to a format!("{}: {}", prefix, msg)-style construction via
the configured error_constructor. Downstreams that don’t expose
trait-bridged plugins can ignore this knob entirely.
target_dep_overrides: Vec<FfiTargetDepOverride>Per-target overrides for the core-crate dependency emitted into the
generated FFI Cargo.toml. Used when some cfg(...) target requires a
reduced feature set (e.g. the x86_64-linux-android emulator cannot
link ONNX Runtime, so sample_core ships an android-target feature
flag that drops every ORT-dependent extractor). ~keep
When this list is non-empty the scaffold emits
[target.'cfg(not(<any-cfg>))'.dependencies] for the default branch
plus one [target.'cfg(<cfg>)'.dependencies] block per override,
instead of the unconditional [dependencies] block.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for FfiConfig
impl<'de> Deserialize<'de> for FfiConfig
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for FfiConfig
impl JsonSchema for FfiConfig
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreAuto Trait Implementations§
impl Freeze for FfiConfig
impl RefUnwindSafe for FfiConfig
impl Send for FfiConfig
impl Sync for FfiConfig
impl Unpin for FfiConfig
impl UnsafeUnpin for FfiConfig
impl UnwindSafe for FfiConfig
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more