diff --git a/crates/sui-types/src/execution.rs b/crates/sui-types/src/execution.rs index d72c9cbe75742..12882eda3f95f 100644 --- a/crates/sui-types/src/execution.rs +++ b/crates/sui-types/src/execution.rs @@ -193,14 +193,36 @@ pub enum ExecutionTimeObservationKey { Upgrade, } +impl std::fmt::Display for ExecutionTimeObservationKey { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + ExecutionTimeObservationKey::MoveEntryPoint { + module, function, .. + } => { + write!(f, "{}:{}", module, function) + } + ExecutionTimeObservationKey::TransferObjects => write!(f, "TransferObjects"), + ExecutionTimeObservationKey::SplitCoins => write!(f, "SplitCoins"), + ExecutionTimeObservationKey::MergeCoins => write!(f, "MergeCoins"), + ExecutionTimeObservationKey::Publish => write!(f, "Publish"), + ExecutionTimeObservationKey::MakeMoveVec => write!(f, "MakeMoveVec"), + ExecutionTimeObservationKey::Upgrade => write!(f, "Upgrade"), + } + } +} + impl ExecutionTimeObservationKey { + pub fn is_move_call(&self) -> bool { + matches!(self, ExecutionTimeObservationKey::MoveEntryPoint { .. }) + } + pub fn from_command(command: &Command) -> Self { match command { Command::MoveCall(call) => ExecutionTimeObservationKey::MoveEntryPoint { package: call.package, module: call.module.clone(), function: call.function.clone(), - type_arguments: call.type_arguments.clone(), + type_arguments: vec![], }, Command::TransferObjects(_, _) => ExecutionTimeObservationKey::TransferObjects, Command::SplitCoins(_, _) => ExecutionTimeObservationKey::SplitCoins, @@ -227,12 +249,17 @@ impl ExecutionTimeObservationKey { } } +#[derive(Debug, Serialize, Deserialize)] pub enum ExecutionTiming { Success(Duration), Abort(Duration), } impl ExecutionTiming { + pub fn is_abort(&self) -> bool { + matches!(self, ExecutionTiming::Abort(_)) + } + pub fn duration(&self) -> Duration { match self { ExecutionTiming::Success(duration) => *duration,