cu_profiler_core/
metadata.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
7#[serde(rename_all = "kebab-case")]
8pub enum BackendKind {
9 Recorded,
11 ProgramTest,
13 BanksClient,
15 Mollusk,
17 RpcSimulation,
19}
20
21impl BackendKind {
22 #[must_use]
24 pub fn as_str(self) -> &'static str {
25 match self {
26 Self::Recorded => "recorded",
27 Self::ProgramTest => "program-test",
28 Self::BanksClient => "banks-client",
29 Self::Mollusk => "mollusk",
30 Self::RpcSimulation => "rpc-simulation",
31 }
32 }
33}
34
35#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
37#[serde(rename_all = "kebab-case")]
38pub enum InstrumentationMode {
39 Off,
41 On,
43}
44
45#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
47pub struct RunMetadata {
48 pub profiler_version: String,
50 pub backend: BackendKind,
52 pub instrumentation: InstrumentationMode,
54 #[serde(skip_serializing_if = "Option::is_none")]
56 pub git_commit: Option<String>,
57 #[serde(default, skip_serializing_if = "Vec::is_empty")]
59 pub solana_versions: Vec<String>,
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub generated_at: Option<String>,
63}
64
65impl RunMetadata {
66 #[must_use]
68 pub fn recorded(profiler_version: impl Into<String>) -> Self {
69 Self {
70 profiler_version: profiler_version.into(),
71 backend: BackendKind::Recorded,
72 instrumentation: InstrumentationMode::Off,
73 git_commit: None,
74 solana_versions: Vec::new(),
75 generated_at: None,
76 }
77 }
78}