gammaloop_api/commands/
duplicate.rs1use clap::{Args, Subcommand};
2use color_eyre::Result;
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6use crate::{
7 completion::CompletionArgExt,
8 state::{ProcessRef, State},
9};
10
11#[derive(Subcommand, Debug, Serialize, Deserialize, Clone, JsonSchema, PartialEq)]
12pub enum Duplicate {
13 Integrand(DuplicateIntegrand),
15}
16
17impl Duplicate {
18 pub fn run(self, state: &mut State) -> Result<()> {
19 match self {
20 Duplicate::Integrand(command) => command.run(state),
21 }
22 }
23}
24
25#[derive(Debug, Args, Serialize, Deserialize, Clone, JsonSchema, PartialEq)]
26pub struct DuplicateIntegrand {
27 #[arg(
29 short = 'p',
30 long = "process",
31 value_name = "PROCESS",
32 completion_process_selector(crate::completion::SelectorKind::Any)
33 )]
34 pub process: Option<ProcessRef>,
35
36 #[arg(
38 short = 'i',
39 long = "integrand-name",
40 value_name = "NAME",
41 completion_integrand_selector(crate::completion::SelectorKind::Any)
42 )]
43 pub integrand_name: Option<String>,
44
45 #[arg(long = "output_process_name", value_name = "NAME")]
47 pub output_process_name: String,
48
49 #[arg(long = "output_integrand_name", value_name = "NAME")]
51 pub output_integrand_name: String,
52}
53
54impl DuplicateIntegrand {
55 pub fn run(self, state: &mut State) -> Result<()> {
56 state.duplicate_integrand(
57 self.process.as_ref(),
58 self.integrand_name.as_ref(),
59 &self.output_process_name,
60 &self.output_integrand_name,
61 )
62 }
63}