@@ -132,6 +132,7 @@ use mmap_file::{
132132 Reader ,
133133 Writer ,
134134} ;
135+ use serde:: de:: DeserializeOwned ;
135136use serde:: { Deserialize , Serialize } ;
136137use starknet_api:: block:: { BlockHash , BlockNumber , BlockSignature , StarknetVersion } ;
137138use starknet_api:: core:: { ClassHash , CompiledClassHash , ContractAddress , Nonce } ;
@@ -163,6 +164,12 @@ use crate::header::StorageBlockHeader;
163164use crate :: metrics:: { register_metrics, STORAGE_COMMIT_LATENCY } ;
164165use crate :: mmap_file:: MMapFileStats ;
165166use crate :: state:: data:: IndexedDeprecatedContractClass ;
167+ use crate :: storage_reader_server:: {
168+ create_storage_reader_server,
169+ ServerConfig ,
170+ StorageReaderServer ,
171+ StorageReaderServerHandler ,
172+ } ;
166173use crate :: version:: { VersionStorageReader , VersionStorageWriter } ;
167174
168175// For more details on the storage version, see the module documentation.
@@ -186,6 +193,24 @@ pub fn open_storage_with_metric(
186193 open_storage_internal ( storage_config, Some ( open_readers_metric) )
187194}
188195
196+ /// Same as [`open_storage_with_metric`], but also creates a storage reader server.
197+ pub fn open_storage_with_metric_and_server < RequestHandler , Request , Response > (
198+ storage_config : StorageConfig ,
199+ open_readers_metric : & ' static MetricGauge ,
200+ storage_reader_server_config : ServerConfig ,
201+ ) -> StorageResult < StorageWithServer < RequestHandler , Request , Response > >
202+ where
203+ RequestHandler : StorageReaderServerHandler < Request , Response > ,
204+ Request : Serialize + DeserializeOwned + Send + ' static ,
205+ Response : Serialize + DeserializeOwned + Send + ' static ,
206+ {
207+ let ( reader, writer) =
208+ open_storage_internal ( storage_config, Some ( open_readers_metric) ) . expect ( "" ) ;
209+ let storage_reader_server =
210+ create_storage_reader_server ( reader. clone ( ) , storage_reader_server_config) ;
211+ Ok ( ( reader, writer, storage_reader_server) )
212+ }
213+
189214fn open_storage_internal (
190215 storage_config : StorageConfig ,
191216 open_readers_metric : Option < & ' static MetricGauge > ,
@@ -699,6 +724,11 @@ pub enum StorageError {
699724/// A type alias that maps to std::result::Result<T, StorageError>.
700725pub type StorageResult < V > = std:: result:: Result < V , StorageError > ;
701726
727+ /// A type alias for the return type of storage operations that include an optional storage reader
728+ /// server.
729+ pub type StorageWithServer < RequestHandler , Request , Response > =
730+ ( StorageReader , StorageWriter , Option < StorageReaderServer < RequestHandler , Request , Response > > ) ;
731+
702732/// A struct for the configuration of the storage.
703733#[ allow( missing_docs) ]
704734#[ derive( Serialize , Debug , Default , Deserialize , Clone , PartialEq , Validate ) ]
0 commit comments