use super::CallContext;
use super::RibosomeT;
use holochain_types::prelude::*;
use holochain_wasmer_host::prelude::*;
use std::sync::Arc;
const DEF_REF_SIZE: usize = 32;
pub(crate) trait KeyRefExt: Sized {
fn to_tag(&self) -> Arc<str>;
}
impl KeyRefExt for XSalsa20Poly1305KeyRef {
fn to_tag(&self) -> Arc<str> {
let tag = subtle_encoding::base64::encode(self);
let tag = unsafe { String::from_utf8_unchecked(tag) };
tag.into_boxed_str().into()
}
}
pub struct HostFnApi<Ribosome: RibosomeT> {
ribosome: Arc<Ribosome>,
call_context: Arc<CallContext>,
}
impl<Ribosome: RibosomeT> HostFnApi<Ribosome> {
pub fn new(ribosome: Arc<Ribosome>, call_context: Arc<CallContext>) -> Self {
Self {
ribosome,
call_context,
}
}
}
macro_rules! host_fn_api_impls {
( $( $(#[cfg(feature = $feat:literal)])? fn $f:ident ( $input:ty ) -> $output:ty; )* ) => {
$(
$(#[cfg(feature = $feat)])?
pub(crate) mod $f;
)*
impl<Ribosome: RibosomeT> HostFnApiT for HostFnApi<Ribosome> {
$(
$(#[cfg(feature = $feat)])?
fn $f(&self, input: $input) -> Result<$output, HostFnApiError> {
$f::$f(
self.ribosome.clone(),
self.call_context.clone(),
input.into()
).map_err(|e| HostFnApiError::RibosomeError(Box::new(e)))
}
)*
}
};
}
use holochain_zome_types as zt;
host_fn_api_impls! {
#[cfg(feature = "unstable-countersigning")]
fn accept_countersigning_preflight_request(zt::countersigning::PreflightRequest) -> zt::countersigning::PreflightRequestAcceptance;
fn agent_info (()) -> zt::info::AgentInfo;
#[cfg(feature = "unstable-functions")]
fn block_agent (zt::block::BlockAgentInput) -> ();
fn dna_info_1 (()) -> zt::info::DnaInfoV1;
fn dna_info_2 (()) -> zt::info::DnaInfoV2;
fn call_info (()) -> zt::info::CallInfo;
fn call (Vec<zt::call::Call>) -> Vec<zt::prelude::ZomeCallResponse>;
fn capability_claims (()) -> ();
fn capability_grants (()) -> ();
fn capability_info (()) -> ();
fn create (zt::entry::CreateInput) -> holo_hash::ActionHash;
fn x_salsa20_poly1305_shared_secret_create_random(
Option<zt::x_salsa20_poly1305::key_ref::XSalsa20Poly1305KeyRef>
) -> zt::x_salsa20_poly1305::key_ref::XSalsa20Poly1305KeyRef;
fn x_salsa20_poly1305_shared_secret_export(
zt::x_salsa20_poly1305::XSalsa20Poly1305SharedSecretExport
) -> zt::x_salsa20_poly1305::encrypted_data::XSalsa20Poly1305EncryptedData;
fn x_salsa20_poly1305_shared_secret_ingest(
zt::x_salsa20_poly1305::XSalsa20Poly1305SharedSecretIngest
) -> zt::x_salsa20_poly1305::key_ref::XSalsa20Poly1305KeyRef;
fn x_salsa20_poly1305_encrypt(
holochain_zome_types::x_salsa20_poly1305::XSalsa20Poly1305Encrypt
) -> holochain_zome_types::x_salsa20_poly1305::encrypted_data::XSalsa20Poly1305EncryptedData;
fn x_salsa20_poly1305_decrypt(
holochain_zome_types::x_salsa20_poly1305::XSalsa20Poly1305Decrypt
) -> Option<holochain_zome_types::x_salsa20_poly1305::data::XSalsa20Poly1305Data>;
fn create_x25519_keypair(()) -> holochain_zome_types::x_salsa20_poly1305::x25519::X25519PubKey;
fn x_25519_x_salsa20_poly1305_encrypt (holochain_zome_types::x_salsa20_poly1305::X25519XSalsa20Poly1305Encrypt) -> holochain_zome_types::x_salsa20_poly1305::encrypted_data::XSalsa20Poly1305EncryptedData;
fn x_25519_x_salsa20_poly1305_decrypt (holochain_zome_types::x_salsa20_poly1305::X25519XSalsa20Poly1305Decrypt) -> Option<holochain_zome_types::x_salsa20_poly1305::data::XSalsa20Poly1305Data>;
fn ed_25519_x_salsa20_poly1305_encrypt (holochain_zome_types::x_salsa20_poly1305::Ed25519XSalsa20Poly1305Encrypt) -> holochain_zome_types::x_salsa20_poly1305::encrypted_data::XSalsa20Poly1305EncryptedData;
fn ed_25519_x_salsa20_poly1305_decrypt (holochain_zome_types::x_salsa20_poly1305::Ed25519XSalsa20Poly1305Decrypt) -> holochain_zome_types::x_salsa20_poly1305::data::XSalsa20Poly1305Data;
fn create_link (zt::link::CreateLinkInput) -> holo_hash::ActionHash;
fn delete (zt::entry::DeleteInput) -> holo_hash::ActionHash;
fn delete_link (zt::link::DeleteLinkInput) -> holo_hash::ActionHash;
fn emit_signal (zt::signal::AppSignal) -> ();
fn trace (zt::trace::TraceMsg) -> ();
fn get (Vec<zt::entry::GetInput>) -> Vec<Option<zt::record::Record>>;
fn get_agent_activity (zt::agent_activity::GetAgentActivityInput) -> zt::query::AgentActivity;
fn get_details (Vec<zt::entry::GetInput>) -> Vec<Option<zt::metadata::Details>>;
fn get_links (Vec<zt::link::GetLinksInput>) -> Vec<Vec<zt::link::Link>>;
fn get_links_details (Vec<zt::link::GetLinksInput>) -> Vec<zt::link::LinkDetails>;
fn count_links(zt::query::LinkQuery) -> usize;
fn must_get_valid_record (zt::entry::MustGetValidRecordInput) -> Record;
fn must_get_entry (zt::entry::MustGetEntryInput) -> EntryHashed;
fn must_get_action (zt::entry::MustGetActionInput) -> SignedActionHashed;
fn must_get_agent_activity (zt::chain::MustGetAgentActivityInput) -> Vec<zt::op::RegisterAgentActivity>;
fn query (zt::query::ChainQueryFilter) -> Vec<Record>;
fn random_bytes (u32) -> zt::bytes::Bytes;
fn send_remote_signal (zt::signal::RemoteSignal) -> ();
fn schedule (String) -> ();
#[cfg(feature = "unstable-functions")]
fn sleep (core::time::Duration) -> ();
fn sign (zt::signature::Sign) -> zt::signature::Signature;
fn sign_ephemeral (zt::signature::SignEphemeral) -> zt::signature::EphemeralSignatures;
fn sys_time (()) -> zt::timestamp::Timestamp;
#[cfg(feature = "unstable-functions")]
fn unblock_agent (zt::block::BlockAgentInput) -> ();
fn update (zt::entry::UpdateInput) -> holo_hash::ActionHash;
fn verify_signature (zt::signature::VerifySignature) -> bool;
fn zome_info (()) -> zt::info::ZomeInfo;
fn create_clone_cell(zt::clone::CreateCloneCellInput) -> zt::clone::ClonedCell;
fn disable_clone_cell(zt::clone::DisableCloneCellInput) -> ();
fn enable_clone_cell(zt::clone::EnableCloneCellInput) -> zt::clone::ClonedCell;
fn delete_clone_cell(zt::clone::DeleteCloneCellInput) -> ();
fn close_chain(zt::chain::CloseChainInput) -> holo_hash::ActionHash;
fn open_chain(zt::chain::OpenChainInput) -> holo_hash::ActionHash;
fn get_validation_receipts(zt::validate::GetValidationReceiptsInput) -> Vec<zt::validate::ValidationReceiptSet>;
}