pub struct CreateSchemaCommandHandler;Expand description
Handler for creating JSON Schema from configuration types
This handler orchestrates schema generation and output handling, supporting both stdout and file output.
§Architecture
- No Step layer needed (single operation)
- Delegates schema generation to
SchemaGenerator(Infrastructure) - Handles output routing (stdout vs file)
§Examples
use torrust_tracker_deployer_lib::application::command_handlers::create::schema::CreateSchemaCommandHandler;
use std::path::PathBuf;
use tempfile::TempDir;
// Generate to stdout
let schema = CreateSchemaCommandHandler::execute(None)?;
println!("{}", schema);
// Generate to file (use temp directory to avoid leaving artifacts)
let temp_dir = TempDir::new()?;
let schema_path = temp_dir.path().join("schema.json");
CreateSchemaCommandHandler::execute(Some(schema_path))?;Implementations§
Source§impl CreateSchemaCommandHandler
impl CreateSchemaCommandHandler
Sourcepub fn execute(
output_path: Option<PathBuf>,
) -> Result<String, CreateSchemaCommandHandlerError>
pub fn execute( output_path: Option<PathBuf>, ) -> Result<String, CreateSchemaCommandHandlerError>
Executes the create schema command
Generates JSON Schema for EnvironmentCreationConfig and either writes
it to a file or returns it as a string.
§Arguments
output_path- Optional path to write schema file. IfNone, returns schema as string.
§Returns
Ok(String)- The generated schema (for stdout output or testing)Err(CreateSchemaCommandHandlerError)- If generation or file writing fails
§Output Behavior
- No path: Returns schema string (caller handles stdout)
- With path: Writes to file and returns the schema string
§Examples
use torrust_tracker_deployer_lib::application::command_handlers::create::schema::CreateSchemaCommandHandler;
use std::path::PathBuf;
use tempfile::TempDir;
// Output to stdout (caller prints the returned string)
let schema = CreateSchemaCommandHandler::execute(None)?;
println!("{}", schema);
// Output to file (use temp directory to avoid leaving artifacts)
let temp_dir = TempDir::new()?;
let schema_path = temp_dir.path().join("schema.json");
let schema = CreateSchemaCommandHandler::execute(Some(schema_path))?;
// File is written, schema string also returned for confirmation§Errors
Returns error if:
- Schema generation fails (infrastructure error)
- Parent directory creation fails (when writing to file)
- File write fails (when writing to file)
Auto Trait Implementations§
impl Freeze for CreateSchemaCommandHandler
impl RefUnwindSafe for CreateSchemaCommandHandler
impl Send for CreateSchemaCommandHandler
impl Sync for CreateSchemaCommandHandler
impl Unpin for CreateSchemaCommandHandler
impl UnsafeUnpin for CreateSchemaCommandHandler
impl UnwindSafe for CreateSchemaCommandHandler
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