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<Range: RangeBounds<usize>>(&self, range: Range) -> Result<()>
pub fn push_input<Range: RangeBounds<usize>>(&self, range: Range) -> 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},
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§impl From<MessageHandle> for MessageHandle
impl From<MessageHandle> for MessageHandle
source§fn from(other: MessageHandle) -> Self
fn from(other: MessageHandle) -> Self
source§impl Output for MessageHandle
impl Output for MessageHandle
source§impl PartialEq for MessageHandle
impl PartialEq for MessageHandle
source§fn eq(&self, other: &MessageHandle) -> bool
fn eq(&self, other: &MessageHandle) -> bool
self
and other
values to be equal, and is used
by ==
.impl Copy for MessageHandle
impl Eq for MessageHandle
impl StructuralEq for MessageHandle
impl StructuralPartialEq for MessageHandle
Auto Trait Implementations§
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
§impl<T> Conv for T
impl<T> Conv for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.