Struct fedimint_client::oplog::OperationLogEntry
source · pub struct OperationLogEntry { /* private fields */ }Expand description
Represents an operation triggered by a user, typically related to sending or receiving money.
There are three levels of introspection possible for OperationLogEntrys:
- The
OperationLogEntry::operation_module_kindfunction returns the kind of the module that created the operation. - The
OperationLogEntry::metafunction returns static meta data that was associated with the operation when it was created. Modules define their own meta structures, so the module kind has to be used to determine the structure of the meta data. - To find out the current state of the operation there is a two-step
process:
* First, the
OperationLogEntry::outcomefunction returns the outcome if the operation finished and the update subscription stream has been processed till its end at least once. * If that isn’t the case, theOperationLogEntry::outcomemethod will returnNoneand the appropriate update subscription function has to be called. See the respective client extension trait for these functions.
Implementations§
source§impl OperationLogEntry
impl OperationLogEntry
sourcepub fn operation_module_kind(&self) -> &str
pub fn operation_module_kind(&self) -> &str
Returns the kind of the module that generated the operation
sourcepub fn meta<M: DeserializeOwned>(&self) -> M
pub fn meta<M: DeserializeOwned>(&self) -> M
Returns the meta data of the operation. This is a JSON value that can be
either returned as a serde_json::Value or deserialized into a
specific type. The specific type should be named <Module>OperationMeta
in the module’s client crate. The module can be determined by calling
OperationLogEntry::operation_module_kind.
sourcepub fn outcome<D: DeserializeOwned>(&self) -> Option<D>
pub fn outcome<D: DeserializeOwned>(&self) -> Option<D>
Returns the last state update of the operation, if any was cached yet.
If this hasn’t been the case yet and None is returned subscribe to the
appropriate update stream.
§Determining the return type
OperationLogEntry::meta should tell you the which operation type of
a given module the outcome belongs to. The operation type will have a
corresponding async fn subscribe_type(&self, operation_id: OperationId) -> anyhow::Result<UpdateStreamOrOutcome<TypeState>>;
function that returns a UpdateStreamOrOutcome<S> where S is the
high-level state the operation is in. If this state is terminal, i.e.
the stream closes after returning it, it will be cached as the outcome
of the operation.
This means the type to be used for deserializing the outcome is S,
often called <OperationType>State. Alternatively one can also use
serde_json::Value to get the unstructured data.
sourcepub fn outcome_or_updates<U, S>(
&self,
db: &Database,
operation_id: OperationId,
stream_gen: impl FnOnce() -> S
) -> UpdateStreamOrOutcome<U>
pub fn outcome_or_updates<U, S>( &self, db: &Database, operation_id: OperationId, stream_gen: impl FnOnce() -> S ) -> UpdateStreamOrOutcome<U>
Returns an a UpdateStreamOrOutcome enum that can be converted into
an update stream for easier handling using
UpdateStreamOrOutcome::into_stream but can also be matched over to
shortcut the handling of final outcomes.
Trait Implementations§
source§impl Debug for OperationLogEntry
impl Debug for OperationLogEntry
source§impl Decodable for OperationLogEntry
impl Decodable for OperationLogEntry
source§fn consensus_decode<R: Read>(
r: &mut R,
modules: &ModuleDecoderRegistry
) -> Result<Self, DecodeError>
fn consensus_decode<R: Read>( r: &mut R, modules: &ModuleDecoderRegistry ) -> Result<Self, DecodeError>
source§fn consensus_decode_hex(
hex: &str,
modules: &ModuleRegistry<Decoder, DecodingMode>
) -> Result<Self, DecodeError>
fn consensus_decode_hex( hex: &str, modules: &ModuleRegistry<Decoder, DecodingMode> ) -> Result<Self, DecodeError>
source§impl<'de> Deserialize<'de> for OperationLogEntry
impl<'de> Deserialize<'de> for OperationLogEntry
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl Encodable for OperationLogEntry
impl Encodable for OperationLogEntry
source§fn consensus_encode<W: Write>(&self, writer: &mut W) -> Result<usize, Error>
fn consensus_encode<W: Write>(&self, writer: &mut W) -> Result<usize, Error>
source§fn consensus_encode_to_vec(&self) -> Result<Vec<u8>, Error>
fn consensus_encode_to_vec(&self) -> Result<Vec<u8>, Error>
Self::consensus_encode to newly allocated Vec<u8>fn consensus_encode_to_hex(&self) -> Result<String, Error>
Auto Trait Implementations§
impl RefUnwindSafe for OperationLogEntry
impl Send for OperationLogEntry
impl Sync for OperationLogEntry
impl Unpin for OperationLogEntry
impl UnwindSafe for OperationLogEntry
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
source§impl<T> DatabaseValue for T
impl<T> DatabaseValue for T
fn from_bytes( data: &[u8], modules: &ModuleRegistry<Decoder, DecodingMode> ) -> Result<T, DecodingError>
fn to_bytes(&self) -> Vec<u8> ⓘ
source§impl<T> DynEncodable for Twhere
T: Encodable,
impl<T> DynEncodable for Twhere
T: Encodable,
§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,
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§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.source§impl<T> Serialize for T
impl<T> Serialize for T
fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<Ok, Error>
§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.