Struct gstd::msg::MessageHandle
source · pub struct MessageHandle(/* private fields */);
Expand description
Message handle.
Gear allows users and program interaction via messages. Message creation consists of the following parts: message initialization, filling the message with payload (can be gradual), and message sending.
/// Here are the functions that constitute the parts of forming and sending messages:
MessageHandle::init
initializes the messageMessageHandle::push
adds a payload to a messageMessageHandle::commit
sends a message
The send transaction will be posted only after the execution of the message processing has been finished.
To identify a message that is being built from parts of a program, you
should use MessageHandle
obtained via MessageHandle::init
.
§Examples
use gstd::msg::{self, MessageHandle};
#[no_mangle]
extern "C" fn handle() {
let msg_handle = MessageHandle::init().expect("Unable to init");
msg_handle.push(b"Hello,").expect("Unable to push");
msg_handle.push(b" world!").expect("Unable to push");
msg_handle
.commit(msg::source(), 0)
.expect("Unable to commit");
}
Implementations§
source§impl MessageHandle
impl MessageHandle
sourcepub fn init() -> Result<Self>
pub fn init() -> Result<Self>
Initialize a message to send formed in parts.
Gear allows programs to work with messages that consist of several
parts. This function initializes a message built in parts and
returns the corresponding MessageHandle
.
sourcepub fn push<T: AsRef<[u8]>>(&self, payload: T) -> Result<()>
pub fn push<T: AsRef<[u8]>>(&self, payload: T) -> Result<()>
Push a payload part of the message to be sent in parts.
Gear allows programs to work with messages in parts.
This function adds a payload
part to the message.
sourcepub fn push_input(&self, range: impl RangeBounds<usize>) -> Result<()>
pub fn push_input(&self, range: impl RangeBounds<usize>) -> Result<()>
Same as push
but uses the input buffer as a payload
source.
The argument of this method is the index range defining the input buffer’s piece to be pushed back to the output.
§Examples
Send half of the incoming payload back to the sender.
use gstd::msg::{self, MessageHandle};
#[no_mangle]
extern "C" fn handle() {
let msg_handle = MessageHandle::init().expect("Unable to init");
msg_handle
.push_input(0..msg::size() / 2)
.expect("Unable to push");
msg_handle
.commit(msg::source(), 0)
.expect("Unable to commit");
}
sourcepub fn commit(self, program: ActorId, value: u128) -> Result<MessageId>
pub fn commit(self, program: ActorId, value: u128) -> Result<MessageId>
Finalize and send the message formed in parts.
Gear allows programs to work with messages that consist of several parts. This function finalizes the message built in parts and sends it.
The first argument is the address of the target account. The second argument is the value to be transferred from the current program account to the message target account.
sourcepub fn commit_for_reply(
self,
program: ActorId,
value: u128,
reply_deposit: u64,
) -> Result<MessageFuture>
pub fn commit_for_reply( self, program: ActorId, value: u128, reply_deposit: u64, ) -> Result<MessageFuture>
sourcepub fn commit_for_reply_as<D: Decode>(
self,
program: ActorId,
value: u128,
reply_deposit: u64,
) -> Result<CodecMessageFuture<D>>
pub fn commit_for_reply_as<D: Decode>( self, program: ActorId, value: u128, reply_deposit: u64, ) -> Result<CodecMessageFuture<D>>
sourcepub fn commit_delayed(
self,
program: ActorId,
value: u128,
delay: u32,
) -> Result<MessageId>
pub fn commit_delayed( self, program: ActorId, value: u128, delay: u32, ) -> Result<MessageId>
Same as commit
, but sends the message after the
delay
expressed in block count.
sourcepub fn commit_with_gas(
self,
program: ActorId,
gas_limit: u64,
value: u128,
) -> Result<MessageId>
pub fn commit_with_gas( self, program: ActorId, gas_limit: u64, value: u128, ) -> Result<MessageId>
Same as commit
, but with an explicit gas
limit.
§Examples
use gstd::msg::{self, MessageHandle};
#[no_mangle]
extern "C" fn handle() {
let msg_handle = MessageHandle::init().expect("Unable to init");
msg_handle.push(b"Hello,").expect("Unable to push");
msg_handle.push(b" world!").expect("Unable to push");
msg_handle
.commit_with_gas(msg::source(), 10_000_000, 42)
.expect("Unable to commit");
}
sourcepub fn commit_with_gas_for_reply(
self,
program: ActorId,
gas_limit: u64,
value: u128,
reply_deposit: u64,
) -> Result<MessageFuture>
pub fn commit_with_gas_for_reply( self, program: ActorId, gas_limit: u64, value: u128, reply_deposit: u64, ) -> Result<MessageFuture>
Same as commit_with_gas
, but the program
will interrupt until the reply is received.
Argument reply_deposit: u64
used to provide gas for
future reply handling (skipped if zero).
§See also
sourcepub fn commit_with_gas_for_reply_as<D: Decode>(
self,
program: ActorId,
gas_limit: u64,
value: u128,
reply_deposit: u64,
) -> Result<CodecMessageFuture<D>>
pub fn commit_with_gas_for_reply_as<D: Decode>( self, program: ActorId, gas_limit: u64, value: u128, reply_deposit: u64, ) -> Result<CodecMessageFuture<D>>
Same as commit_with_gas
, but the program
will interrupt until the reply is received.
Argument reply_deposit: u64
used to provide gas for
future reply handling (skipped if zero).
The output should be decodable via SCALE codec.
§See also
sourcepub fn commit_with_gas_delayed(
self,
program: ActorId,
gas_limit: u64,
value: u128,
delay: u32,
) -> Result<MessageId>
pub fn commit_with_gas_delayed( self, program: ActorId, gas_limit: u64, value: u128, delay: u32, ) -> Result<MessageId>
Same as commit_with_gas
, but sends
the message after the delay
expressed in block count.
sourcepub fn commit_from_reservation(
self,
id: ReservationId,
program: ActorId,
value: u128,
) -> Result<MessageId>
pub fn commit_from_reservation( self, id: ReservationId, program: ActorId, value: u128, ) -> Result<MessageId>
Same as commit
, but it spends gas from the
reservation instead of borrowing from the gas limit provided with the
incoming message.
§Examples
use gstd::{
msg::{self, MessageHandle},
prelude::*,
ReservationId,
};
#[no_mangle]
extern "C" fn handle() {
let reservation_id = ReservationId::reserve(5_000_000, 100).expect("Unable to reserve");
let msg_handle = MessageHandle::init().expect("Unable to init");
msg_handle.push(b"Hello,").expect("Unable to push");
msg_handle.push(b" world!").expect("Unable to push");
msg_handle
.commit_from_reservation(reservation_id, msg::source(), 42)
.expect("Unable to commit");
}
sourcepub fn commit_from_reservation_for_reply(
self,
id: ReservationId,
program: ActorId,
value: u128,
reply_deposit: u64,
) -> Result<MessageFuture>
pub fn commit_from_reservation_for_reply( self, id: ReservationId, program: ActorId, value: u128, reply_deposit: u64, ) -> Result<MessageFuture>
Same as commit_from_reservation
, but the program
will interrupt until the reply is received.
Argument reply_deposit: u64
used to provide gas for
future reply handling (skipped if zero).
§See also
sourcepub fn commit_from_reservation_for_reply_as<D: Decode>(
self,
id: ReservationId,
program: ActorId,
value: u128,
reply_deposit: u64,
) -> Result<CodecMessageFuture<D>>
pub fn commit_from_reservation_for_reply_as<D: Decode>( self, id: ReservationId, program: ActorId, value: u128, reply_deposit: u64, ) -> Result<CodecMessageFuture<D>>
Same as commit_from_reservation
, but the program
will interrupt until the reply is received.
Argument reply_deposit: u64
used to provide gas for
future reply handling (skipped if zero).
The output should be decodable via SCALE codec.
§See also
sourcepub fn commit_delayed_from_reservation(
self,
id: ReservationId,
program: ActorId,
value: u128,
delay: u32,
) -> Result<MessageId>
pub fn commit_delayed_from_reservation( self, id: ReservationId, program: ActorId, value: u128, delay: u32, ) -> Result<MessageId>
Same as commit_from_reservation
, but
sends the message after the delay
expressed in block count.
Trait Implementations§
source§impl AsRef<MessageHandle> for MessageHandle
impl AsRef<MessageHandle> for MessageHandle
source§impl Clone for MessageHandle
impl Clone for MessageHandle
source§fn clone(&self) -> MessageHandle
fn clone(&self) -> MessageHandle
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for MessageHandle
impl Debug for MessageHandle
source§impl From<MessageHandle> for MessageHandle
impl From<MessageHandle> for MessageHandle
source§fn from(other: MessageHandle) -> Self
fn from(other: MessageHandle) -> Self
source§impl From<MessageHandle> for MessageHandle
impl From<MessageHandle> for MessageHandle
source§impl Output for MessageHandle
impl Output for MessageHandle
source§impl PartialEq for MessageHandle
impl PartialEq for MessageHandle
impl Copy for MessageHandle
impl Eq for MessageHandle
impl StructuralPartialEq for MessageHandle
Auto Trait Implementations§
impl Freeze for MessageHandle
impl RefUnwindSafe for MessageHandle
impl Send for MessageHandle
impl Sync for MessageHandle
impl Unpin for MessageHandle
impl UnwindSafe for MessageHandle
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)