perforce_cli/cmd/change/
delete.rs1use std::process::Command;
2
3use super::{
4 ArbitraryJobStatus, Change, ExclusiveOption, ForceOperationMode, OriginalChangeListMode,
5 TakesChangeList, Unselected,
6};
7
8#[cfg_attr(
15 not(feature = "lt2015_2"),
16 doc = "The remote variant is [`RemoteDeleteMode`]."
17)]
18#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
19pub struct LocalDeleteMode;
20
21#[cfg(not(feature = "lt2015_2"))]
23#[derive(Debug, Clone, PartialEq, Eq)]
24pub struct RemoteDeleteMode {
25 pub(super) server_id: String,
26}
27
28#[cfg_attr(not(feature = "lt2015_2"), doc = "[`RemoteDeleteMode`] form.")]
32#[cfg_attr(feature = "lt2015_2", doc = "remote form.")]
33#[derive(Debug, Clone, PartialEq, Eq)]
34pub struct DeleteMode<L = LocalDeleteMode> {
35 pub(super) loc: L,
36}
37
38impl ExclusiveOption for LocalDeleteMode {}
39
40#[cfg(not(feature = "lt2015_2"))]
41impl ExclusiveOption for RemoteDeleteMode {
42 fn inject_args(&self, command: &mut Command) {
43 command.arg("-f");
44 #[cfg(feature = "lt2022_1")]
45 command.arg(format!("--server={}", self.server_id));
46 #[cfg(not(feature = "lt2022_1"))]
47 command.arg(format!("--serverid={}", self.server_id));
48 }
49}
50
51impl<L: ExclusiveOption> ExclusiveOption for DeleteMode<L> {
52 fn inject_args(&self, command: &mut Command) {
53 command.arg("-d");
54 self.loc.inject_args(command);
55 }
56}
57
58impl<L> TakesChangeList for DeleteMode<L> {}
59
60#[doc(hidden)]
77pub trait TransferDeleteMode {}
78
79impl TransferDeleteMode for Unselected {}
81impl TransferDeleteMode for ForceOperationMode {}
82
83impl TransferDeleteMode for OriginalChangeListMode {}
85
86#[cfg(not(feature = "lt2015_2"))]
92#[doc(hidden)]
93pub trait TransferRemoteDeleteMode {}
94
95#[cfg(not(feature = "lt2015_2"))]
96impl TransferRemoteDeleteMode for Unselected {}
97#[cfg(not(feature = "lt2015_2"))]
98impl TransferRemoteDeleteMode for ForceOperationMode {}
99
100impl<O, C> Change<DeleteMode<LocalDeleteMode>, O, C, Unselected> {
105 pub fn arbitrary_job_status(
107 self,
108 ) -> Change<DeleteMode<LocalDeleteMode>, O, C, ArbitraryJobStatus> {
109 Change {
110 bin: self.bin,
111 global_opts: self.global_opts,
112 mode: self.mode,
113 permission_mode: self.permission_mode,
114 changelist_mode: self.changelist_mode,
115 job_status_mode: ArbitraryJobStatus,
116 }
117 }
118}
119
120impl<C, S> Change<DeleteMode<LocalDeleteMode>, Unselected, C, S> {
121 pub fn force(self) -> Change<DeleteMode<LocalDeleteMode>, ForceOperationMode, C, S> {
124 Change {
125 bin: self.bin,
126 global_opts: self.global_opts,
127 mode: self.mode,
128 permission_mode: ForceOperationMode,
129 changelist_mode: self.changelist_mode,
130 job_status_mode: self.job_status_mode,
131 }
132 }
133}
134
135impl<O, S> Change<DeleteMode<LocalDeleteMode>, O, Unselected, S> {
136 pub fn original(self) -> Change<DeleteMode<LocalDeleteMode>, O, OriginalChangeListMode, S> {
139 Change {
140 bin: self.bin,
141 global_opts: self.global_opts,
142 mode: self.mode,
143 permission_mode: self.permission_mode,
144 changelist_mode: OriginalChangeListMode,
145 job_status_mode: self.job_status_mode,
146 }
147 }
148}
149
150#[cfg(not(feature = "lt2015_2"))]
152impl<O: TransferRemoteDeleteMode> Change<DeleteMode<LocalDeleteMode>, O, Unselected, Unselected> {
153 pub fn server_id(
163 self,
164 server_id: impl Into<String>,
165 ) -> Change<DeleteMode<RemoteDeleteMode>, Unselected, Unselected, Unselected> {
166 Change {
167 bin: self.bin,
168 global_opts: self.global_opts,
169 mode: DeleteMode {
170 loc: RemoteDeleteMode {
171 server_id: server_id.into(),
172 },
173 },
174 permission_mode: Unselected,
175 changelist_mode: Unselected,
176 job_status_mode: Unselected,
177 }
178 }
179}