pub struct TrailRecords<'a, C, D = Data> { /* private fields */ }Expand description
Record API scoped to a specific trail.
This handle builds record-oriented transactions and loads record data from the trail’s linked-table storage.
Implementations§
Source§impl<'a, C, D> TrailRecords<'a, C, D>
impl<'a, C, D> TrailRecords<'a, C, D>
Sourcepub fn using_capability(self, capability_id: ObjectID) -> Self
pub fn using_capability(self, capability_id: ObjectID) -> Self
Uses the provided capability as the auth capability for subsequent write operations.
Sourcepub async fn get(&self, sequence_number: u64) -> Result<Record<D>, Error>where
C: AuditTrailReadOnly,
D: DeserializeOwned,
pub async fn get(&self, sequence_number: u64) -> Result<Record<D>, Error>where
C: AuditTrailReadOnly,
D: DeserializeOwned,
Loads a single record by sequence number.
§Errors
Returns an error if the record cannot be loaded or deserialized.
Sourcepub fn add<S>(
&self,
data: D,
metadata: Option<String>,
tag: Option<String>,
) -> TransactionBuilder<AddRecord>
pub fn add<S>( &self, data: D, metadata: Option<String>, tag: Option<String>, ) -> TransactionBuilder<AddRecord>
Builds a transaction that appends a record to the trail.
Tagged writes must reference a tag already defined on the trail. They also require a capability whose
role allows both AddRecord and the requested tag.
Sourcepub fn delete<S>(
&self,
sequence_number: u64,
) -> TransactionBuilder<DeleteRecord>where
C: AuditTrailFull + CoreClient<S>,
S: Signer<IotaKeySignature> + OptionalSync,
pub fn delete<S>(
&self,
sequence_number: u64,
) -> TransactionBuilder<DeleteRecord>where
C: AuditTrailFull + CoreClient<S>,
S: Signer<IotaKeySignature> + OptionalSync,
Builds a transaction that deletes a single record.
Deletion remains subject to record locking rules and tag-based access restrictions enforced on-chain.
Sourcepub fn delete_records_batch<S>(
&self,
limit: u64,
) -> TransactionBuilder<DeleteRecordsBatch>where
C: AuditTrailFull + CoreClient<S>,
S: Signer<IotaKeySignature> + OptionalSync,
pub fn delete_records_batch<S>(
&self,
limit: u64,
) -> TransactionBuilder<DeleteRecordsBatch>where
C: AuditTrailFull + CoreClient<S>,
S: Signer<IotaKeySignature> + OptionalSync,
Builds a transaction that deletes up to limit records in one operation.
Batch deletion requires DeleteAllRecords, walks the trail from the front in sequence order, and silently
skips records that are either locked or whose tag is not in the capability’s allowed set. The returned
vector contains the sequence numbers actually deleted in deletion order; it may be shorter than limit
(or empty) when records are skipped or the trail runs out of records before limit is reached.
§Locking semantics
The set of locked records is fixed at the start of the transaction. For count-based windows, the protected
window is the last count records present when the call begins — records this same call deletes do not
change which other records are protected. Time-based locks are evaluated against the clock timestamp
captured at the start of the call. Running delete_records_batch(limit) therefore produces the same
final trail state as invoking delete_record once per deletable sequence number, as long as the locking
configuration is not mutated and no new records are added between calls.
§Caveats
- Partial progress is not an error. An empty returned vector means every front-to-back candidate was either locked or tag-filtered out.
- Tag filtering is silent. A capability with a narrow tag scope can make the batch appear to stop early while locked-and-disallowed records still exist further back.
- Gas and object-size limits. The call walks and mutates inline; prefer modest
limitvalues and repeat the call rather than passing a single largelimit. - Order is fixed. Use
Self::deleteto target specific sequence numbers.
Sourcepub async fn correct(
&self,
_replaces: Vec<u64>,
_data: D,
_metadata: Option<String>,
) -> Result<(), Error>where
C: AuditTrailFull,
pub async fn correct(
&self,
_replaces: Vec<u64>,
_data: D,
_metadata: Option<String>,
) -> Result<(), Error>where
C: AuditTrailFull,
Sourcepub async fn record_count(&self) -> Result<u64, Error>where
C: AuditTrailReadOnly,
pub async fn record_count(&self) -> Result<u64, Error>where
C: AuditTrailReadOnly,
Returns the number of records currently stored in the trail.
§Errors
Returns an error if the count cannot be computed from the current on-chain state.
Sourcepub async fn list(&self) -> Result<HashMap<u64, Record<D>>, Error>where
C: AuditTrailReadOnly,
D: DeserializeOwned,
pub async fn list(&self) -> Result<HashMap<u64, Record<D>>, Error>where
C: AuditTrailReadOnly,
D: DeserializeOwned,
Sourcepub async fn list_with_limit(
&self,
max_entries: usize,
) -> Result<HashMap<u64, Record<D>>, Error>where
C: AuditTrailReadOnly,
D: DeserializeOwned,
pub async fn list_with_limit(
&self,
max_entries: usize,
) -> Result<HashMap<u64, Record<D>>, Error>where
C: AuditTrailReadOnly,
D: DeserializeOwned,
Lists all records with a hard cap to protect against expensive traversals.
Sourcepub async fn list_page(
&self,
cursor: Option<u64>,
limit: usize,
) -> Result<PaginatedRecord<D>, Error>where
C: AuditTrailReadOnly,
D: DeserializeOwned,
pub async fn list_page(
&self,
cursor: Option<u64>,
limit: usize,
) -> Result<PaginatedRecord<D>, Error>where
C: AuditTrailReadOnly,
D: DeserializeOwned,
Lists one page of linked-table records starting from cursor.
Pass None for the first page; use next_cursor for subsequent pages.
Trait Implementations§
Source§impl<'a, C: Clone, D: Clone> Clone for TrailRecords<'a, C, D>
impl<'a, C: Clone, D: Clone> Clone for TrailRecords<'a, C, D>
Source§fn clone(&self) -> TrailRecords<'a, C, D>
fn clone(&self) -> TrailRecords<'a, C, D>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl<'a, C, D> Freeze for TrailRecords<'a, C, D>
impl<'a, C, D> RefUnwindSafe for TrailRecords<'a, C, D>where
C: RefUnwindSafe,
D: RefUnwindSafe,
impl<'a, C, D> Send for TrailRecords<'a, C, D>
impl<'a, C, D> Sync for TrailRecords<'a, C, D>
impl<'a, C, D> Unpin for TrailRecords<'a, C, D>where
D: Unpin,
impl<'a, C, D> UnsafeUnpin for TrailRecords<'a, C, D>
impl<'a, C, D> UnwindSafe for TrailRecords<'a, C, D>where
C: RefUnwindSafe,
D: UnwindSafe,
Blanket Implementations§
§impl<U> As for U
impl<U> As for U
§fn as_<T>(self) -> Twhere
T: CastFrom<U>,
fn as_<T>(self) -> Twhere
T: CastFrom<U>,
self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read more§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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,
§impl<T> Conv for T
impl<T> Conv for T
§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> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a Request§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].§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> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§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.