pub struct ReleaseCommandController { /* private fields */ }Expand description
Presentation layer controller for release command workflow
Coordinates user interaction, progress reporting, and input validation
before delegating to the application layer ReleaseCommandHandler.
§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
ReleaseCommandHandler.
Implementations§
Source§impl ReleaseCommandController
impl ReleaseCommandController
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 release command controller
Creates a ReleaseCommandController with direct repository injection.
This follows the single container architecture pattern.
Sourcepub async fn execute(
&mut self,
environment_name: &str,
output_format: OutputFormat,
) -> Result<(), ReleaseSubcommandError>
pub async fn execute( &mut self, environment_name: &str, output_format: OutputFormat, ) -> Result<(), ReleaseSubcommandError>
Execute the complete release workflow
Orchestrates all steps of the release command:
- Validate environment name
- Execute release via application handler
- Complete with success message
§Arguments
environment_name- The name of the environment to release to
§Errors
Returns an error if:
- Environment name is invalid (format validation fails)
- Environment is not in the Configured state
- Docker Compose file preparation fails
- State persistence fails
§Returns
Returns Ok(()) on success, or a ReleaseSubcommandError if any step fails.
Auto Trait Implementations§
impl Freeze for ReleaseCommandController
impl !RefUnwindSafe for ReleaseCommandController
impl Send for ReleaseCommandController
impl Sync for ReleaseCommandController
impl Unpin for ReleaseCommandController
impl UnsafeUnpin for ReleaseCommandController
impl !UnwindSafe for ReleaseCommandController
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
Mutably borrows from an owned value. Read more
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>
Converts
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>
Converts
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>
Wrap the input message
T in a tonic::Request