Skip to content

Commit d7f9399

Browse files
authored
add CliCommand::operation_id() to get the original operationId (#1336)
1 parent aa863de commit d7f9399

8 files changed

Lines changed: 284 additions & 9 deletions

File tree

progenitor-impl/src/cli.rs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
// Copyright 2024 Oxide Computer Company
1+
// Copyright 2026 Oxide Computer Company
22

33
use std::collections::BTreeMap;
44

55
use heck::ToKebabCase;
66
use openapiv3::OpenAPI;
77
use proc_macro2::TokenStream;
8-
use quote::{ToTokens, format_ident, quote};
8+
use quote::{format_ident, quote};
99
use typify::{Type, TypeEnumVariant, TypeSpaceImpl, TypeStructPropInfo};
1010

1111
use crate::{
@@ -61,14 +61,14 @@ impl Generator {
6161
let execute_ops = methods.iter().map(|op| &op.execute_fn);
6262
let trait_ops = methods.iter().map(|op| &op.execute_trait);
6363

64+
let operation_id = raw_methods.iter().map(|method| &method.operation_id);
65+
6466
let cli_fns = raw_methods
6567
.iter()
66-
.map(|method| format_ident!("cli_{}", sanitize(&method.operation_id, Case::Snake)))
67-
.collect::<Vec<_>>();
68+
.map(|method| format_ident!("cli_{}", sanitize(&method.operation_id, Case::Snake)));
6869
let execute_fns = raw_methods
6970
.iter()
70-
.map(|method| format_ident!("execute_{}", sanitize(&method.operation_id, Case::Snake)))
71-
.collect::<Vec<_>>();
71+
.map(|method| format_ident!("execute_{}", sanitize(&method.operation_id, Case::Snake)));
7272

7373
let cli_variants = raw_methods
7474
.iter()
@@ -80,12 +80,12 @@ impl Generator {
8080
path: syn::parse_str(crate_name).unwrap(),
8181
};
8282

83-
let cli_bounds: Vec<_> = self
83+
let cli_bounds = self
8484
.settings
8585
.extra_cli_bounds
8686
.iter()
87-
.map(|b| syn::parse_str::<syn::Path>(b).unwrap().into_token_stream())
88-
.collect();
87+
.map(|b| syn::parse_str::<syn::Path>(b).unwrap())
88+
.collect::<Vec<_>>();
8989

9090
let code = quote! {
9191
use #crate_path::*;
@@ -169,6 +169,14 @@ impl Generator {
169169
)*
170170
].into_iter()
171171
}
172+
173+
pub fn operation_id(&self) -> &'static str {
174+
match self {
175+
#(
176+
CliCommand::#cli_variants => #operation_id,
177+
)*
178+
}
179+
}
172180
}
173181

174182
};

progenitor-impl/tests/output/src/buildomat_cli.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,4 +1145,30 @@ impl CliCommand {
11451145
]
11461146
.into_iter()
11471147
}
1148+
1149+
pub fn operation_id(&self) -> &'static str {
1150+
match self {
1151+
CliCommand::ControlHold => "control_hold",
1152+
CliCommand::ControlResume => "control_resume",
1153+
CliCommand::TaskGet => "task_get",
1154+
CliCommand::TasksGet => "tasks_get",
1155+
CliCommand::TaskSubmit => "task_submit",
1156+
CliCommand::TaskEventsGet => "task_events_get",
1157+
CliCommand::TaskOutputsGet => "task_outputs_get",
1158+
CliCommand::TaskOutputDownload => "task_output_download",
1159+
CliCommand::UserCreate => "user_create",
1160+
CliCommand::Whoami => "whoami",
1161+
CliCommand::WhoamiPutName => "whoami_put_name",
1162+
CliCommand::WorkerBootstrap => "worker_bootstrap",
1163+
CliCommand::WorkerPing => "worker_ping",
1164+
CliCommand::WorkerTaskAppend => "worker_task_append",
1165+
CliCommand::WorkerTaskUploadChunk => "worker_task_upload_chunk",
1166+
CliCommand::WorkerTaskComplete => "worker_task_complete",
1167+
CliCommand::WorkerTaskAddOutput => "worker_task_add_output",
1168+
CliCommand::WorkersList => "workers_list",
1169+
CliCommand::WorkersRecycle => "workers_recycle",
1170+
CliCommand::GetThingOrThings => "get_thing_or_things",
1171+
CliCommand::HeaderArg => "header_arg",
1172+
}
1173+
}
11481174
}

progenitor-impl/tests/output/src/cli_gen_cli.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,4 +116,10 @@ impl CliCommand {
116116
pub fn iter() -> impl Iterator<Item = CliCommand> {
117117
vec![CliCommand::Uno].into_iter()
118118
}
119+
120+
pub fn operation_id(&self) -> &'static str {
121+
match self {
122+
CliCommand::Uno => "uno",
123+
}
124+
}
119125
}

progenitor-impl/tests/output/src/keeper_cli.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,4 +478,15 @@ impl CliCommand {
478478
]
479479
.into_iter()
480480
}
481+
482+
pub fn operation_id(&self) -> &'static str {
483+
match self {
484+
CliCommand::Enrol => "enrol",
485+
CliCommand::GlobalJobs => "global_jobs",
486+
CliCommand::Ping => "ping",
487+
CliCommand::ReportFinish => "report_finish",
488+
CliCommand::ReportOutput => "report_output",
489+
CliCommand::ReportStart => "report_start",
490+
}
491+
}
481492
}

progenitor-impl/tests/output/src/nexus_cli.rs

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14502,4 +14502,202 @@ impl CliCommand {
1450214502
]
1450314503
.into_iter()
1450414504
}
14505+
14506+
pub fn operation_id(&self) -> &'static str {
14507+
match self {
14508+
CliCommand::DiskViewById => "disk_view_by_id",
14509+
CliCommand::ImageViewById => "image_view_by_id",
14510+
CliCommand::InstanceViewById => "instance_view_by_id",
14511+
CliCommand::InstanceNetworkInterfaceViewById => "instance_network_interface_view_by_id",
14512+
CliCommand::OrganizationViewById => "organization_view_by_id",
14513+
CliCommand::ProjectViewById => "project_view_by_id",
14514+
CliCommand::SnapshotViewById => "snapshot_view_by_id",
14515+
CliCommand::VpcRouterRouteViewById => "vpc_router_route_view_by_id",
14516+
CliCommand::VpcRouterViewById => "vpc_router_view_by_id",
14517+
CliCommand::VpcSubnetViewById => "vpc_subnet_view_by_id",
14518+
CliCommand::VpcViewById => "vpc_view_by_id",
14519+
CliCommand::DeviceAuthRequest => "device_auth_request",
14520+
CliCommand::DeviceAuthConfirm => "device_auth_confirm",
14521+
CliCommand::DeviceAccessToken => "device_access_token",
14522+
CliCommand::GroupList => "group_list",
14523+
CliCommand::LoginSpoof => "login_spoof",
14524+
CliCommand::LoginLocal => "login_local",
14525+
CliCommand::LoginSamlBegin => "login_saml_begin",
14526+
CliCommand::LoginSaml => "login_saml",
14527+
CliCommand::Logout => "logout",
14528+
CliCommand::OrganizationList => "organization_list",
14529+
CliCommand::OrganizationCreate => "organization_create",
14530+
CliCommand::OrganizationView => "organization_view",
14531+
CliCommand::OrganizationUpdate => "organization_update",
14532+
CliCommand::OrganizationDelete => "organization_delete",
14533+
CliCommand::OrganizationPolicyView => "organization_policy_view",
14534+
CliCommand::OrganizationPolicyUpdate => "organization_policy_update",
14535+
CliCommand::ProjectList => "project_list",
14536+
CliCommand::ProjectCreate => "project_create",
14537+
CliCommand::ProjectView => "project_view",
14538+
CliCommand::ProjectUpdate => "project_update",
14539+
CliCommand::ProjectDelete => "project_delete",
14540+
CliCommand::DiskList => "disk_list",
14541+
CliCommand::DiskCreate => "disk_create",
14542+
CliCommand::DiskView => "disk_view",
14543+
CliCommand::DiskDelete => "disk_delete",
14544+
CliCommand::DiskMetricsList => "disk_metrics_list",
14545+
CliCommand::ImageList => "image_list",
14546+
CliCommand::ImageCreate => "image_create",
14547+
CliCommand::ImageView => "image_view",
14548+
CliCommand::ImageDelete => "image_delete",
14549+
CliCommand::InstanceList => "instance_list",
14550+
CliCommand::InstanceCreate => "instance_create",
14551+
CliCommand::InstanceView => "instance_view",
14552+
CliCommand::InstanceDelete => "instance_delete",
14553+
CliCommand::InstanceDiskList => "instance_disk_list",
14554+
CliCommand::InstanceDiskAttach => "instance_disk_attach",
14555+
CliCommand::InstanceDiskDetach => "instance_disk_detach",
14556+
CliCommand::InstanceExternalIpList => "instance_external_ip_list",
14557+
CliCommand::InstanceMigrate => "instance_migrate",
14558+
CliCommand::InstanceNetworkInterfaceList => "instance_network_interface_list",
14559+
CliCommand::InstanceNetworkInterfaceCreate => "instance_network_interface_create",
14560+
CliCommand::InstanceNetworkInterfaceView => "instance_network_interface_view",
14561+
CliCommand::InstanceNetworkInterfaceUpdate => "instance_network_interface_update",
14562+
CliCommand::InstanceNetworkInterfaceDelete => "instance_network_interface_delete",
14563+
CliCommand::InstanceReboot => "instance_reboot",
14564+
CliCommand::InstanceSerialConsole => "instance_serial_console",
14565+
CliCommand::InstanceSerialConsoleStream => "instance_serial_console_stream",
14566+
CliCommand::InstanceSerialConsoleStreamV2 => "instance_serial_console_stream_v2",
14567+
CliCommand::InstanceStart => "instance_start",
14568+
CliCommand::InstanceStop => "instance_stop",
14569+
CliCommand::ProjectPolicyView => "project_policy_view",
14570+
CliCommand::ProjectPolicyUpdate => "project_policy_update",
14571+
CliCommand::SnapshotList => "snapshot_list",
14572+
CliCommand::SnapshotCreate => "snapshot_create",
14573+
CliCommand::SnapshotView => "snapshot_view",
14574+
CliCommand::SnapshotDelete => "snapshot_delete",
14575+
CliCommand::VpcList => "vpc_list",
14576+
CliCommand::VpcCreate => "vpc_create",
14577+
CliCommand::VpcView => "vpc_view",
14578+
CliCommand::VpcUpdate => "vpc_update",
14579+
CliCommand::VpcDelete => "vpc_delete",
14580+
CliCommand::VpcFirewallRulesView => "vpc_firewall_rules_view",
14581+
CliCommand::VpcFirewallRulesUpdate => "vpc_firewall_rules_update",
14582+
CliCommand::VpcRouterList => "vpc_router_list",
14583+
CliCommand::VpcRouterCreate => "vpc_router_create",
14584+
CliCommand::VpcRouterView => "vpc_router_view",
14585+
CliCommand::VpcRouterUpdate => "vpc_router_update",
14586+
CliCommand::VpcRouterDelete => "vpc_router_delete",
14587+
CliCommand::VpcRouterRouteList => "vpc_router_route_list",
14588+
CliCommand::VpcRouterRouteCreate => "vpc_router_route_create",
14589+
CliCommand::VpcRouterRouteView => "vpc_router_route_view",
14590+
CliCommand::VpcRouterRouteUpdate => "vpc_router_route_update",
14591+
CliCommand::VpcRouterRouteDelete => "vpc_router_route_delete",
14592+
CliCommand::VpcSubnetList => "vpc_subnet_list",
14593+
CliCommand::VpcSubnetCreate => "vpc_subnet_create",
14594+
CliCommand::VpcSubnetView => "vpc_subnet_view",
14595+
CliCommand::VpcSubnetUpdate => "vpc_subnet_update",
14596+
CliCommand::VpcSubnetDelete => "vpc_subnet_delete",
14597+
CliCommand::VpcSubnetListNetworkInterfaces => "vpc_subnet_list_network_interfaces",
14598+
CliCommand::PolicyView => "policy_view",
14599+
CliCommand::PolicyUpdate => "policy_update",
14600+
CliCommand::RoleList => "role_list",
14601+
CliCommand::RoleView => "role_view",
14602+
CliCommand::SessionMe => "session_me",
14603+
CliCommand::SessionMeGroups => "session_me_groups",
14604+
CliCommand::SessionSshkeyList => "session_sshkey_list",
14605+
CliCommand::SessionSshkeyCreate => "session_sshkey_create",
14606+
CliCommand::SessionSshkeyView => "session_sshkey_view",
14607+
CliCommand::SessionSshkeyDelete => "session_sshkey_delete",
14608+
CliCommand::SystemImageViewById => "system_image_view_by_id",
14609+
CliCommand::IpPoolViewById => "ip_pool_view_by_id",
14610+
CliCommand::SiloViewById => "silo_view_by_id",
14611+
CliCommand::CertificateList => "certificate_list",
14612+
CliCommand::CertificateCreate => "certificate_create",
14613+
CliCommand::CertificateView => "certificate_view",
14614+
CliCommand::CertificateDelete => "certificate_delete",
14615+
CliCommand::PhysicalDiskList => "physical_disk_list",
14616+
CliCommand::RackList => "rack_list",
14617+
CliCommand::RackView => "rack_view",
14618+
CliCommand::SledList => "sled_list",
14619+
CliCommand::SledView => "sled_view",
14620+
CliCommand::SledPhysicalDiskList => "sled_physical_disk_list",
14621+
CliCommand::SystemImageList => "system_image_list",
14622+
CliCommand::SystemImageCreate => "system_image_create",
14623+
CliCommand::SystemImageView => "system_image_view",
14624+
CliCommand::SystemImageDelete => "system_image_delete",
14625+
CliCommand::IpPoolList => "ip_pool_list",
14626+
CliCommand::IpPoolCreate => "ip_pool_create",
14627+
CliCommand::IpPoolView => "ip_pool_view",
14628+
CliCommand::IpPoolUpdate => "ip_pool_update",
14629+
CliCommand::IpPoolDelete => "ip_pool_delete",
14630+
CliCommand::IpPoolRangeList => "ip_pool_range_list",
14631+
CliCommand::IpPoolRangeAdd => "ip_pool_range_add",
14632+
CliCommand::IpPoolRangeRemove => "ip_pool_range_remove",
14633+
CliCommand::IpPoolServiceView => "ip_pool_service_view",
14634+
CliCommand::IpPoolServiceRangeList => "ip_pool_service_range_list",
14635+
CliCommand::IpPoolServiceRangeAdd => "ip_pool_service_range_add",
14636+
CliCommand::IpPoolServiceRangeRemove => "ip_pool_service_range_remove",
14637+
CliCommand::SystemMetric => "system_metric",
14638+
CliCommand::SystemPolicyView => "system_policy_view",
14639+
CliCommand::SystemPolicyUpdate => "system_policy_update",
14640+
CliCommand::SagaList => "saga_list",
14641+
CliCommand::SagaView => "saga_view",
14642+
CliCommand::SiloList => "silo_list",
14643+
CliCommand::SiloCreate => "silo_create",
14644+
CliCommand::SiloView => "silo_view",
14645+
CliCommand::SiloDelete => "silo_delete",
14646+
CliCommand::SiloIdentityProviderList => "silo_identity_provider_list",
14647+
CliCommand::LocalIdpUserCreate => "local_idp_user_create",
14648+
CliCommand::LocalIdpUserDelete => "local_idp_user_delete",
14649+
CliCommand::LocalIdpUserSetPassword => "local_idp_user_set_password",
14650+
CliCommand::SamlIdentityProviderCreate => "saml_identity_provider_create",
14651+
CliCommand::SamlIdentityProviderView => "saml_identity_provider_view",
14652+
CliCommand::SiloPolicyView => "silo_policy_view",
14653+
CliCommand::SiloPolicyUpdate => "silo_policy_update",
14654+
CliCommand::SiloUsersList => "silo_users_list",
14655+
CliCommand::SiloUserView => "silo_user_view",
14656+
CliCommand::SystemUserList => "system_user_list",
14657+
CliCommand::SystemUserView => "system_user_view",
14658+
CliCommand::TimeseriesSchemaGet => "timeseries_schema_get",
14659+
CliCommand::UserList => "user_list",
14660+
CliCommand::DiskListV1 => "disk_list_v1",
14661+
CliCommand::DiskCreateV1 => "disk_create_v1",
14662+
CliCommand::DiskViewV1 => "disk_view_v1",
14663+
CliCommand::DiskDeleteV1 => "disk_delete_v1",
14664+
CliCommand::InstanceListV1 => "instance_list_v1",
14665+
CliCommand::InstanceCreateV1 => "instance_create_v1",
14666+
CliCommand::InstanceViewV1 => "instance_view_v1",
14667+
CliCommand::InstanceDeleteV1 => "instance_delete_v1",
14668+
CliCommand::InstanceDiskListV1 => "instance_disk_list_v1",
14669+
CliCommand::InstanceDiskAttachV1 => "instance_disk_attach_v1",
14670+
CliCommand::InstanceDiskDetachV1 => "instance_disk_detach_v1",
14671+
CliCommand::InstanceMigrateV1 => "instance_migrate_v1",
14672+
CliCommand::InstanceRebootV1 => "instance_reboot_v1",
14673+
CliCommand::InstanceSerialConsoleV1 => "instance_serial_console_v1",
14674+
CliCommand::InstanceSerialConsoleStreamV1 => "instance_serial_console_stream_v1",
14675+
CliCommand::InstanceStartV1 => "instance_start_v1",
14676+
CliCommand::InstanceStopV1 => "instance_stop_v1",
14677+
CliCommand::OrganizationListV1 => "organization_list_v1",
14678+
CliCommand::OrganizationCreateV1 => "organization_create_v1",
14679+
CliCommand::OrganizationViewV1 => "organization_view_v1",
14680+
CliCommand::OrganizationUpdateV1 => "organization_update_v1",
14681+
CliCommand::OrganizationDeleteV1 => "organization_delete_v1",
14682+
CliCommand::OrganizationPolicyViewV1 => "organization_policy_view_v1",
14683+
CliCommand::OrganizationPolicyUpdateV1 => "organization_policy_update_v1",
14684+
CliCommand::ProjectListV1 => "project_list_v1",
14685+
CliCommand::ProjectCreateV1 => "project_create_v1",
14686+
CliCommand::ProjectViewV1 => "project_view_v1",
14687+
CliCommand::ProjectUpdateV1 => "project_update_v1",
14688+
CliCommand::ProjectDeleteV1 => "project_delete_v1",
14689+
CliCommand::ProjectPolicyViewV1 => "project_policy_view_v1",
14690+
CliCommand::ProjectPolicyUpdateV1 => "project_policy_update_v1",
14691+
CliCommand::SystemComponentVersionList => "system_component_version_list",
14692+
CliCommand::UpdateDeploymentsList => "update_deployments_list",
14693+
CliCommand::UpdateDeploymentView => "update_deployment_view",
14694+
CliCommand::SystemUpdateRefresh => "system_update_refresh",
14695+
CliCommand::SystemUpdateStart => "system_update_start",
14696+
CliCommand::SystemUpdateStop => "system_update_stop",
14697+
CliCommand::SystemUpdateList => "system_update_list",
14698+
CliCommand::SystemUpdateView => "system_update_view",
14699+
CliCommand::SystemUpdateComponentsList => "system_update_components_list",
14700+
CliCommand::SystemVersion => "system_version",
14701+
}
14702+
}
1450514703
}

progenitor-impl/tests/output/src/param_collision_cli.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,10 @@ impl CliCommand {
152152
pub fn iter() -> impl Iterator<Item = CliCommand> {
153153
vec![CliCommand::KeyGet].into_iter()
154154
}
155+
156+
pub fn operation_id(&self) -> &'static str {
157+
match self {
158+
CliCommand::KeyGet => "key_get",
159+
}
160+
}
155161
}

progenitor-impl/tests/output/src/param_overrides_cli.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,10 @@ impl CliCommand {
108108
pub fn iter() -> impl Iterator<Item = CliCommand> {
109109
vec![CliCommand::KeyGet].into_iter()
110110
}
111+
112+
pub fn operation_id(&self) -> &'static str {
113+
match self {
114+
CliCommand::KeyGet => "key_get",
115+
}
116+
}
111117
}

progenitor-impl/tests/output/src/propolis_server_cli.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,4 +447,18 @@ impl CliCommand {
447447
]
448448
.into_iter()
449449
}
450+
451+
pub fn operation_id(&self) -> &'static str {
452+
match self {
453+
CliCommand::InstanceGet => "instance_get",
454+
CliCommand::InstanceEnsure => "instance_ensure",
455+
CliCommand::InstanceIssueCrucibleSnapshotRequest => {
456+
"instance_issue_crucible_snapshot_request"
457+
}
458+
CliCommand::InstanceMigrateStatus => "instance_migrate_status",
459+
CliCommand::InstanceSerial => "instance_serial",
460+
CliCommand::InstanceStatePut => "instance_state_put",
461+
CliCommand::InstanceStateMonitor => "instance_state_monitor",
462+
}
463+
}
450464
}

0 commit comments

Comments
 (0)