use crate::{ActorId, CodeId, MessageId, util::with_optimized_encode};
use gcore::errors::Result;
use gstd_codegen::wait_create_program_for_reply;
use scale_info::scale::Encode;
#[wait_create_program_for_reply]
pub fn create_program<E: Encode>(
code_id: CodeId,
salt: impl AsRef<[u8]>,
payload: E,
value: u128,
) -> Result<(MessageId, ActorId)> {
with_optimized_encode(payload, |buffer| {
super::create_program_bytes(code_id, salt, buffer, value)
})
}
pub fn create_program_delayed<E: Encode>(
code_id: CodeId,
salt: impl AsRef<[u8]>,
payload: E,
value: u128,
delay: u32,
) -> Result<(MessageId, ActorId)> {
with_optimized_encode(payload, |buffer| {
super::create_program_bytes_delayed(code_id, salt, buffer, value, delay)
})
}
#[cfg(not(feature = "ethexe"))]
#[wait_create_program_for_reply]
pub fn create_program_with_gas<E: Encode>(
code_id: CodeId,
salt: impl AsRef<[u8]>,
payload: E,
gas_limit: u64,
value: u128,
) -> Result<(MessageId, ActorId)> {
with_optimized_encode(payload, |buffer| {
super::create_program_bytes_with_gas(code_id, salt, buffer, gas_limit, value)
})
}
#[cfg(not(feature = "ethexe"))]
pub fn create_program_with_gas_delayed<E: Encode>(
code_id: CodeId,
salt: impl AsRef<[u8]>,
payload: E,
gas_limit: u64,
value: u128,
delay: u32,
) -> Result<(MessageId, ActorId)> {
with_optimized_encode(payload, |buffer| {
super::create_program_bytes_with_gas_delayed(code_id, salt, buffer, gas_limit, value, delay)
})
}