Skip to main content

Module interop

Module interop 

Source
Expand description

Cross-framework type interop for Hopper.

Hopper keeps its own Address and AccountView types because they carry segment metadata, layout fingerprints, and borrow-tracking that external types lack. This module provides From/Into conversions so Hopper code can interoperate with the wider Solana ecosystem without loss of type safety.

§Zero-cost reference casts

Both Hopper’s Address and the upstream types (pinocchio::Address, solana_program::pubkey::Pubkey) are #[repr(transparent)] over [u8; 32]. This means reference casts are valid and zero-cost:

let hopper_addr: &Address = Address::from_ref(upstream_addr);
let upstream_ref: &[u8; 32] = hopper_addr.as_array();

§By-value conversions

From/Into impls are provided automatically via the active backend. When legacy-pinocchio-compat is enabled, From<pinocchio::Address> and From<Address> for pinocchio::Address are available. When solana-program-backend is enabled, the same exists for Pubkey.

§Backend-agnostic conversions

Regardless of backend, Hopper Address always converts to/from [u8; 32], making it trivially interoperable with any type that also wraps 32 bytes.

Traits§

TransparentAddress
Marker trait for types that are #[repr(transparent)] over [u8; 32].