-record(crypto_adapter, { init :: fun((distribute@crypto@types:provider_options()) -> {ok, distribute@crypto@types:provider_handle()} | {error, distribute@crypto@types:crypto_error()}), shutdown :: fun((distribute@crypto@types:provider_handle()) -> {ok, nil} | {error, distribute@crypto@types:crypto_error()}), handshake_start :: fun((distribute@crypto@types:provider_handle(), binary(), binary(), gleam@option:option(distribute@crypto@types:handshake_message())) -> {ok, distribute@crypto@types:handshake_result()} | {error, distribute@crypto@types:crypto_error()}), handshake_continue :: fun((distribute@crypto@types:provider_handle(), distribute@crypto@types:handshake_state(), distribute@crypto@types:handshake_message()) -> {ok, distribute@crypto@types:handshake_result()} | {error, distribute@crypto@types:crypto_error()}), secure_context :: fun((distribute@crypto@types:provider_handle(), binary()) -> gleam@option:option(distribute@crypto@types:secure_context())), encrypt :: fun((distribute@crypto@types:provider_handle(), distribute@crypto@types:secure_context(), bitstring()) -> {ok, bitstring()} | {error, distribute@crypto@types:crypto_error()}), decrypt :: fun((distribute@crypto@types:provider_handle(), distribute@crypto@types:secure_context(), bitstring()) -> {ok, bitstring()} | {error, distribute@crypto@types:crypto_error()}), rekey :: fun((distribute@crypto@types:provider_handle(), binary()) -> {ok, nil} | {error, distribute@crypto@types:crypto_error()}), health :: fun((distribute@crypto@types:provider_handle()) -> distribute@crypto@types:health_status()), metrics :: fun((distribute@crypto@types:provider_handle()) -> distribute@crypto@types:crypto_metrics()) }).