Skip to content

Commit 477c0d5

Browse files
authored
chore: remove deref impls (#37)
1 parent 24034ab commit 477c0d5

File tree

4 files changed

+232
-50
lines changed

4 files changed

+232
-50
lines changed

crates/cold/src/task/handle.rs

Lines changed: 180 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -331,8 +331,8 @@ impl ColdStorageReadHandle {
331331
///
332332
/// # Read Access
333333
///
334-
/// All read methods from [`ColdStorageReadHandle`] are available on this
335-
/// handle via [`Deref`](std::ops::Deref).
334+
/// All read methods from [`ColdStorageReadHandle`] are also available
335+
/// directly on this handle.
336336
///
337337
/// # Usage
338338
///
@@ -356,14 +356,6 @@ pub struct ColdStorageHandle {
356356
write_sender: mpsc::Sender<ColdWriteRequest>,
357357
}
358358

359-
impl std::ops::Deref for ColdStorageHandle {
360-
type Target = ColdStorageReadHandle;
361-
362-
fn deref(&self) -> &Self::Target {
363-
&self.reader
364-
}
365-
}
366-
367359
impl ColdStorageHandle {
368360
/// Create a new handle with the given senders.
369361
pub(crate) const fn new(
@@ -463,4 +455,182 @@ impl ColdStorageHandle {
463455
.try_send(ColdWriteRequest::TruncateAbove { block, resp })
464456
.map_err(map_dispatch_error)
465457
}
458+
459+
// ==========================================================================
460+
// Read Operations (delegated to ColdStorageReadHandle)
461+
// ==========================================================================
462+
463+
/// Get a header by specifier.
464+
pub async fn get_header(&self, spec: HeaderSpecifier) -> ColdResult<Option<SealedHeader>> {
465+
self.reader.get_header(spec).await
466+
}
467+
468+
/// Get a header by block number.
469+
pub async fn get_header_by_number(
470+
&self,
471+
block: BlockNumber,
472+
) -> ColdResult<Option<SealedHeader>> {
473+
self.reader.get_header_by_number(block).await
474+
}
475+
476+
/// Get a header by block hash.
477+
pub async fn get_header_by_hash(&self, hash: B256) -> ColdResult<Option<SealedHeader>> {
478+
self.reader.get_header_by_hash(hash).await
479+
}
480+
481+
/// Get multiple headers by specifiers.
482+
pub async fn get_headers(
483+
&self,
484+
specs: Vec<HeaderSpecifier>,
485+
) -> ColdResult<Vec<Option<SealedHeader>>> {
486+
self.reader.get_headers(specs).await
487+
}
488+
489+
/// Get a transaction by specifier, with block confirmation metadata.
490+
pub async fn get_transaction(
491+
&self,
492+
spec: TransactionSpecifier,
493+
) -> ColdResult<Option<Confirmed<RecoveredTx>>> {
494+
self.reader.get_transaction(spec).await
495+
}
496+
497+
/// Get a transaction by hash.
498+
pub async fn get_tx_by_hash(&self, hash: B256) -> ColdResult<Option<Confirmed<RecoveredTx>>> {
499+
self.reader.get_tx_by_hash(hash).await
500+
}
501+
502+
/// Get a transaction by block number and index.
503+
pub async fn get_tx_by_block_and_index(
504+
&self,
505+
block: BlockNumber,
506+
index: u64,
507+
) -> ColdResult<Option<Confirmed<RecoveredTx>>> {
508+
self.reader.get_tx_by_block_and_index(block, index).await
509+
}
510+
511+
/// Get a transaction by block hash and index.
512+
pub async fn get_tx_by_block_hash_and_index(
513+
&self,
514+
block_hash: B256,
515+
index: u64,
516+
) -> ColdResult<Option<Confirmed<RecoveredTx>>> {
517+
self.reader.get_tx_by_block_hash_and_index(block_hash, index).await
518+
}
519+
520+
/// Get all transactions in a block.
521+
pub async fn get_transactions_in_block(
522+
&self,
523+
block: BlockNumber,
524+
) -> ColdResult<Vec<RecoveredTx>> {
525+
self.reader.get_transactions_in_block(block).await
526+
}
527+
528+
/// Get the transaction count for a block.
529+
pub async fn get_transaction_count(&self, block: BlockNumber) -> ColdResult<u64> {
530+
self.reader.get_transaction_count(block).await
531+
}
532+
533+
/// Get a receipt by specifier.
534+
pub async fn get_receipt(&self, spec: ReceiptSpecifier) -> ColdResult<Option<ColdReceipt>> {
535+
self.reader.get_receipt(spec).await
536+
}
537+
538+
/// Get a receipt by transaction hash.
539+
pub async fn get_receipt_by_tx_hash(&self, hash: B256) -> ColdResult<Option<ColdReceipt>> {
540+
self.reader.get_receipt_by_tx_hash(hash).await
541+
}
542+
543+
/// Get a receipt by block number and index.
544+
pub async fn get_receipt_by_block_and_index(
545+
&self,
546+
block: BlockNumber,
547+
index: u64,
548+
) -> ColdResult<Option<ColdReceipt>> {
549+
self.reader.get_receipt_by_block_and_index(block, index).await
550+
}
551+
552+
/// Get all receipts in a block.
553+
pub async fn get_receipts_in_block(&self, block: BlockNumber) -> ColdResult<Vec<ColdReceipt>> {
554+
self.reader.get_receipts_in_block(block).await
555+
}
556+
557+
/// Get signet events by specifier.
558+
pub async fn get_signet_events(
559+
&self,
560+
spec: SignetEventsSpecifier,
561+
) -> ColdResult<Vec<DbSignetEvent>> {
562+
self.reader.get_signet_events(spec).await
563+
}
564+
565+
/// Get signet events in a block.
566+
pub async fn get_signet_events_in_block(
567+
&self,
568+
block: BlockNumber,
569+
) -> ColdResult<Vec<DbSignetEvent>> {
570+
self.reader.get_signet_events_in_block(block).await
571+
}
572+
573+
/// Get signet events in a range of blocks.
574+
pub async fn get_signet_events_in_range(
575+
&self,
576+
start: BlockNumber,
577+
end: BlockNumber,
578+
) -> ColdResult<Vec<DbSignetEvent>> {
579+
self.reader.get_signet_events_in_range(start, end).await
580+
}
581+
582+
/// Get a zenith header by block number.
583+
pub async fn get_zenith_header(
584+
&self,
585+
block: BlockNumber,
586+
) -> ColdResult<Option<DbZenithHeader>> {
587+
self.reader.get_zenith_header(block).await
588+
}
589+
590+
/// Get zenith headers by specifier.
591+
pub async fn get_zenith_headers(
592+
&self,
593+
spec: ZenithHeaderSpecifier,
594+
) -> ColdResult<Vec<DbZenithHeader>> {
595+
self.reader.get_zenith_headers(spec).await
596+
}
597+
598+
/// Get zenith headers in a range of blocks.
599+
pub async fn get_zenith_headers_in_range(
600+
&self,
601+
start: BlockNumber,
602+
end: BlockNumber,
603+
) -> ColdResult<Vec<DbZenithHeader>> {
604+
self.reader.get_zenith_headers_in_range(start, end).await
605+
}
606+
607+
/// Filter logs by block range, address, and topics.
608+
///
609+
/// Follows `eth_getLogs` semantics. Returns matching logs ordered by
610+
/// `(block_number, tx_index, log_index)`.
611+
///
612+
/// # Errors
613+
///
614+
/// Returns [`ColdStorageError::TooManyLogs`] if the query would produce
615+
/// more than `max_logs` results.
616+
pub async fn get_logs(&self, filter: Filter, max_logs: usize) -> ColdResult<Vec<RpcLog>> {
617+
self.reader.get_logs(filter, max_logs).await
618+
}
619+
620+
/// Stream logs matching a filter.
621+
///
622+
/// See [`ColdStorageReadHandle::stream_logs`] for full documentation.
623+
pub async fn stream_logs(
624+
&self,
625+
filter: Filter,
626+
max_logs: usize,
627+
deadline: Duration,
628+
) -> ColdResult<LogStream> {
629+
self.reader.stream_logs(filter, max_logs, deadline).await
630+
}
631+
632+
/// Get the latest block number in storage.
633+
pub async fn get_latest_block(&self) -> ColdResult<Option<BlockNumber>> {
634+
self.reader.get_latest_block().await
635+
}
466636
}

crates/hot-mdbx/src/cursor.rs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@ use signet_hot::{
99
},
1010
};
1111
use signet_libmdbx::{DupItem, Ro, Rw, RwSync, TransactionKind, tx::WriteMarker, tx::iter};
12-
use std::{
13-
borrow::Cow,
14-
ops::{Deref, DerefMut},
15-
};
12+
use std::borrow::Cow;
1613

1714
/// Read only Cursor.
1815
pub type CursorRo<'a> = Cursor<'a, Ro>;
@@ -50,20 +47,6 @@ impl<K: TransactionKind> std::fmt::Debug for Cursor<'_, K> {
5047
}
5148
}
5249

53-
impl<'a, K: TransactionKind> Deref for Cursor<'a, K> {
54-
type Target = signet_libmdbx::Cursor<'a, K>;
55-
56-
fn deref(&self) -> &Self::Target {
57-
&self.inner
58-
}
59-
}
60-
61-
impl<'a, K: TransactionKind> DerefMut for Cursor<'a, K> {
62-
fn deref_mut(&mut self) -> &mut Self::Target {
63-
&mut self.inner
64-
}
65-
}
66-
6750
impl<'a, K: TransactionKind> Cursor<'a, K> {
6851
/// Creates a new `Cursor` wrapping the given `libmdbx` cursor.
6952
pub const fn new(inner: signet_libmdbx::Cursor<'a, K>, fsi: FixedSizeInfo) -> Self {

crates/hot-mdbx/src/lib.rs

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,7 @@ use signet_libmdbx::{
5656
Environment, EnvironmentFlags, Geometry, Mode, Ro, RoSync, Rw, RwSync, SyncMode, ffi,
5757
sys::{HandleSlowReadersReturnCode, PageSize},
5858
};
59-
use std::{
60-
collections::HashMap,
61-
ops::{Deref, Range},
62-
path::Path,
63-
sync::Arc,
64-
};
59+
use std::{collections::HashMap, ops::Range, path::Path, sync::Arc};
6560

6661
mod cursor;
6762
pub use cursor::{Cursor, CursorRo, CursorRoSync, CursorRw, CursorRwSync};
@@ -410,14 +405,6 @@ impl DatabaseEnv {
410405
}
411406
}
412407

413-
impl Deref for DatabaseEnv {
414-
type Target = Environment;
415-
416-
fn deref(&self) -> &Self::Target {
417-
&self.inner
418-
}
419-
}
420-
421408
impl HotKv for DatabaseEnv {
422409
type RoTx = Tx<Ro>;
423410
type RwTx = Tx<Rw>;

crates/types/src/int_list.rs

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,6 @@ pub enum IntegerListError {
3535
#[derive(Clone, PartialEq, Default)]
3636
pub struct IntegerList(RoaringTreemap);
3737

38-
impl core::ops::Deref for IntegerList {
39-
type Target = RoaringTreemap;
40-
41-
fn deref(&self) -> &Self::Target {
42-
&self.0
43-
}
44-
}
45-
4638
impl fmt::Debug for IntegerList {
4739
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
4840
f.write_str("IntegerList")?;
@@ -123,4 +115,54 @@ impl IntegerList {
123115
.map(Self)
124116
.map_err(|_| IntegerListError::FailedToDeserialize)
125117
}
118+
119+
/// Returns an iterator over the integers in the list.
120+
pub fn iter(&self) -> roaring::treemap::Iter<'_> {
121+
self.0.iter()
122+
}
123+
124+
/// Returns the number of integers in the list.
125+
pub fn len(&self) -> u64 {
126+
self.0.len()
127+
}
128+
129+
/// Returns `true` if the list contains no integers.
130+
pub fn is_empty(&self) -> bool {
131+
self.0.is_empty()
132+
}
133+
134+
/// Returns `true` if the list contains the given value.
135+
pub fn contains(&self, value: u64) -> bool {
136+
self.0.contains(value)
137+
}
138+
139+
/// Returns the smallest value in the list, or `None` if empty.
140+
pub fn min(&self) -> Option<u64> {
141+
self.0.min()
142+
}
143+
144+
/// Returns the largest value in the list, or `None` if empty.
145+
pub fn max(&self) -> Option<u64> {
146+
self.0.max()
147+
}
148+
149+
/// Returns the number of integers that are `<= value`.
150+
pub fn rank(&self, value: u64) -> u64 {
151+
self.0.rank(value)
152+
}
153+
154+
/// Returns the `n`th integer in the list (0-indexed).
155+
pub fn select(&self, n: u64) -> Option<u64> {
156+
self.0.select(n)
157+
}
158+
159+
/// Returns the serialized size of the list in bytes.
160+
pub fn serialized_size(&self) -> usize {
161+
self.0.serialized_size()
162+
}
163+
164+
/// Serializes the list into the given writer.
165+
pub fn serialize_into<W: std::io::Write>(&self, writer: W) -> std::io::Result<()> {
166+
self.0.serialize_into(writer)
167+
}
126168
}

0 commit comments

Comments
 (0)