@@ -3,6 +3,7 @@ use crate::{
33 canister_metadata:: canister_metadata,
44 canister_status:: { CanisterStatusResultFromManagementCanister , canister_status} ,
55 delete_canister:: delete_canister,
6+ load_canister_snapshot:: load_canister_snapshot,
67 stop_canister:: stop_canister,
78 take_canister_snapshot:: take_canister_snapshot,
89 update_settings:: { UpdateSettings , update_settings} ,
@@ -12,7 +13,7 @@ use candid::Encode;
1213use ic_base_types:: PrincipalId ;
1314use ic_error_types:: RejectCode ;
1415use ic_management_canister_types_private:: {
15- CanisterSnapshotResponse , IC_00 , TakeCanisterSnapshotArgs ,
16+ CanisterSnapshotResponse , IC_00 , LoadCanisterSnapshotArgs , TakeCanisterSnapshotArgs ,
1617} ;
1718use ic_nervous_system_proxied_canister_calls_tracker:: ProxiedCanisterCallsTracker ;
1819use ic_nervous_system_runtime:: Runtime ;
@@ -62,6 +63,11 @@ pub trait ManagementCanisterClient {
6263 & self ,
6364 args : TakeCanisterSnapshotArgs ,
6465 ) -> Result < CanisterSnapshotResponse , ( i32 , String ) > ;
66+
67+ async fn load_canister_snapshot (
68+ & self ,
69+ args : LoadCanisterSnapshotArgs ,
70+ ) -> Result < ( ) , ( i32 , String ) > ;
6571}
6672
6773/// An example implementation of the ManagementCanisterClient trait.
@@ -197,6 +203,24 @@ impl<Rt: Runtime + Sync> ManagementCanisterClient for ManagementCanisterClientIm
197203
198204 take_canister_snapshot :: < Rt > ( args) . await
199205 }
206+
207+ async fn load_canister_snapshot (
208+ & self ,
209+ args : LoadCanisterSnapshotArgs ,
210+ ) -> Result < ( ) , ( i32 , String ) > {
211+ let _tracker = self . proxied_canister_calls_tracker . map ( |tracker| {
212+ let encoded_args = Encode ! ( & args) . unwrap_or_default ( ) ;
213+ ProxiedCanisterCallsTracker :: start_tracking (
214+ tracker,
215+ dfn_core:: api:: caller ( ) ,
216+ IC_00 ,
217+ "load_canister_snapshot" ,
218+ & encoded_args,
219+ )
220+ } ) ;
221+
222+ load_canister_snapshot :: < Rt > ( args) . await
223+ }
200224}
201225
202226/// A ManagementCanisterClient that wraps another ManagementCanisterClient.
@@ -322,6 +346,14 @@ where
322346 let _loan = self . try_borrow_slot ( ) ?;
323347 self . inner . take_canister_snapshot ( args) . await
324348 }
349+
350+ async fn load_canister_snapshot (
351+ & self ,
352+ args : LoadCanisterSnapshotArgs ,
353+ ) -> Result < ( ) , ( i32 , String ) > {
354+ let _loan = self . try_borrow_slot ( ) ?;
355+ self . inner . load_canister_snapshot ( args) . await
356+ }
325357}
326358
327359/// Increments available_slot_count by used_slot_count when dropped.
@@ -376,6 +408,7 @@ pub enum MockManagementCanisterClientCall {
376408 StopCanister ( CanisterIdRecord ) ,
377409 DeleteCanister ( CanisterIdRecord ) ,
378410 TakeCanisterSnapshot ( TakeCanisterSnapshotArgs ) ,
411+ LoadCanisterSnapshot ( LoadCanisterSnapshotArgs ) ,
379412}
380413
381414#[ derive( Clone , Eq , PartialEq , Debug ) ]
@@ -387,6 +420,7 @@ pub enum MockManagementCanisterClientReply {
387420 StopCanister ( Result < ( ) , ( i32 , String ) > ) ,
388421 DeleteCanister ( Result < ( ) , ( i32 , String ) > ) ,
389422 TakeCanisterSnapshot ( Result < CanisterSnapshotResponse , ( i32 , String ) > ) ,
423+ LoadCanisterSnapshot ( Result < ( ) , ( i32 , String ) > ) ,
390424}
391425
392426#[ async_trait]
@@ -555,6 +589,32 @@ impl ManagementCanisterClient for MockManagementCanisterClient {
555589 ) ,
556590 }
557591 }
592+
593+ async fn load_canister_snapshot (
594+ & self ,
595+ args : LoadCanisterSnapshotArgs ,
596+ ) -> Result < ( ) , ( i32 , String ) > {
597+ self . calls
598+ . lock ( )
599+ . unwrap ( )
600+ . push_back ( MockManagementCanisterClientCall :: LoadCanisterSnapshot ( args) ) ;
601+
602+ let reply = self
603+ . replies
604+ . lock ( )
605+ . unwrap ( )
606+ . pop_front ( )
607+ . expect ( "Expected a MockManagementCanisterClientCall to be on the queue." ) ;
608+
609+ match reply {
610+ MockManagementCanisterClientReply :: LoadCanisterSnapshot ( result) => result,
611+ err => panic ! (
612+ "Expected MockManagementCanisterClientReply::LoadCanisterSnapshot to be at \
613+ the front of the queue. Had {:?}",
614+ err
615+ ) ,
616+ }
617+ }
558618}
559619
560620impl Drop for MockManagementCanisterClient {
0 commit comments