@@ -42,10 +42,10 @@ use crate::protocol::{
4242 read_lp, write_lp, Closed , GetRequest , Handshake , RangeSpec , Request , VERSION ,
4343} ;
4444use crate :: rpc_protocol:: {
45- AddrsRequest , AddrsResponse , IdRequest , IdResponse , ListRequest , ListResponse , ProvideProgress ,
46- ProvideRequest , ProviderRequest , ProviderResponse , ProviderService , ShutdownRequest ,
47- ValidateProgress , ValidateRequest , VersionRequest , VersionResponse , WatchRequest ,
48- WatchResponse ,
45+ AddrsRequest , AddrsResponse , IdRequest , IdResponse , ListBlobsRequest , ListBlobsResponse ,
46+ ListCollectionsRequest , ListCollectionsResponse , ProvideProgress , ProvideRequest ,
47+ ProviderRequest , ProviderResponse , ProviderService , ShutdownRequest , ValidateProgress ,
48+ ValidateRequest , VersionRequest , VersionResponse , WatchRequest , WatchResponse ,
4949} ;
5050use crate :: tls:: { self , Keypair , PeerId } ;
5151use crate :: tokio_util:: read_as_bytes;
@@ -544,12 +544,31 @@ struct RpcHandler {
544544}
545545
546546impl RpcHandler {
547- fn list ( self , _msg : ListRequest ) -> impl Stream < Item = ListResponse > + Send + ' static {
547+ fn list_blobs (
548+ self ,
549+ _msg : ListBlobsRequest ,
550+ ) -> impl Stream < Item = ListBlobsResponse > + Send + ' static {
548551 let items = self
549552 . inner
550553 . db
551554 . blobs ( )
552- . map ( |( hash, path, size) | ListResponse { hash, path, size } ) ;
555+ . map ( |( hash, path, size) | ListBlobsResponse { hash, path, size } ) ;
556+ futures:: stream:: iter ( items)
557+ }
558+
559+ fn list_collections (
560+ self ,
561+ _msg : ListCollectionsRequest ,
562+ ) -> impl Stream < Item = ListCollectionsResponse > + Send + ' static {
563+ let items = self
564+ . inner
565+ . db
566+ . collections ( )
567+ . map ( |( hash, collection) | ListCollectionsResponse {
568+ hash,
569+ total_blobs_count : collection. blobs . len ( ) ,
570+ total_blobs_size : collection. total_blobs_size ,
571+ } ) ;
553572 futures:: stream:: iter ( items)
554573 }
555574
@@ -676,7 +695,14 @@ fn handle_rpc_request<C: ServiceEndpoint<ProviderService>>(
676695 tokio:: spawn ( async move {
677696 use ProviderRequest :: * ;
678697 match msg {
679- List ( msg) => chan. server_streaming ( msg, handler, RpcHandler :: list) . await ,
698+ ListBlobs ( msg) => {
699+ chan. server_streaming ( msg, handler, RpcHandler :: list_blobs)
700+ . await
701+ }
702+ ListCollections ( msg) => {
703+ chan. server_streaming ( msg, handler, RpcHandler :: list_collections)
704+ . await
705+ }
680706 Provide ( msg) => {
681707 chan. server_streaming ( msg, handler, RpcHandler :: provide)
682708 . await
0 commit comments