pub struct DestroyCommandController { /* private fields */ }Expand description
Presentation layer controller for destroy command workflow
Coordinates user interaction, progress reporting, and input validation
before delegating to the application layer DestroyCommandHandler.
§Responsibilities
- Validate user input (environment name format)
- Show progress updates to the user
- Format success/error messages for display
- Delegate business logic to application layer
§Architecture
This controller sits in the presentation layer and handles all user-facing
concerns. It delegates actual business logic to the application layer’s
DestroyCommandHandler, maintaining clear separation of concerns.
Implementations§
Source§impl DestroyCommandController
impl DestroyCommandController
Sourcepub fn new(
repository: Arc<dyn EnvironmentRepository + Send + Sync>,
clock: Arc<dyn Clock>,
user_output: Arc<ReentrantMutex<RefCell<UserOutput>>>,
) -> Self
pub fn new( repository: Arc<dyn EnvironmentRepository + Send + Sync>, clock: Arc<dyn Clock>, user_output: Arc<ReentrantMutex<RefCell<UserOutput>>>, ) -> Self
Create a new destroy command controller
Creates a DestroyCommandController with direct repository injection.
This follows the single container architecture pattern.
Sourcepub async fn execute(
&mut self,
environment_name: &str,
output_format: OutputFormat,
) -> Result<(), DestroySubcommandError>
pub async fn execute( &mut self, environment_name: &str, output_format: OutputFormat, ) -> Result<(), DestroySubcommandError>
Execute the complete destroy workflow
Orchestrates all steps of the destroy command:
- Validate environment name
- Create command handler
- Tear down infrastructure
- Complete with success message
§Arguments
environment_name- The name of the environment to destroy
§Errors
Returns an error if:
- Environment name is invalid (format validation fails)
- Environment cannot be loaded from repository
- Infrastructure teardown fails
- Progress reporting encounters a poisoned mutex
§Returns
Returns Ok(Environment<Destroyed>) on success, or a DestroySubcommandError if any step fails.
Auto Trait Implementations§
impl !RefUnwindSafe for DestroyCommandController
impl !UnwindSafe for DestroyCommandController
impl Freeze for DestroyCommandController
impl Send for DestroyCommandController
impl Sync for DestroyCommandController
impl Unpin for DestroyCommandController
impl UnsafeUnpin for DestroyCommandController
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request