Build call argument expressions using pre-bound let bindings for non-opaque Named params.
Non-opaque Named params use &{name}_core references instead of .into().
Generate a lossy binding→core struct literal for non-opaque delegation.
Sanitized fields use Default::default(), non-sanitized fields are cloned and converted.
Fields are accessed via self. (behind &self), so all non-Copy types need .clone().
Like gen_named_let_bindings_pub but without optional-promotion semantics.
Use this for backends (e.g. WASM) that do not promote non-optional params to Option<T>.
Generate serde-based let bindings for non-opaque Named params.
Serializes binding types to JSON and deserializes to core types.
Used when From impls don’t exist (e.g., types with sanitized fields).
indent is the whitespace prefix for each generated line (e.g., “ “ for functions, “ “ for methods).
NOTE: This function should only be called when cfg.has_serde is true.
The caller (functions.rs, methods.rs) must gate the call behind a has_serde check.
Check if params contain any non-opaque Named types that need let bindings.
This includes direct Named types, Vec types, Vec params
with is_ref=true (which need a Vec<&str> intermediate to pass as &&str),
and sanitized Vec params (which are JSON-deserialized to tuples).
Check if a param type is safe for non-opaque delegation (no complex conversions needed).
Vec and Map params can cause type mismatches (e.g. Vec vs &&str).