From 90c4033a495e9bf4fa577052dba82eef9d5886e0 Mon Sep 17 00:00:00 2001 From: Javier Cicchelli Date: Sun, 28 Sep 2025 22:19:42 +0200 Subject: [PATCH] Defined the AppArguments protocol in the sample target and also, conformed the SampleAppArguments type to it. --- ...ameters.swift => SampleAppArguments.swift} | 14 +++++-- .../Protocols/AppArguments.swift | 40 +++++++++++++++++++ Samples/DocCMiddleware/SampleApp.swift | 2 +- .../Types/Extensions/Logger+Helpers.swift | 2 +- 4 files changed, 52 insertions(+), 6 deletions(-) rename Samples/DocCMiddleware/Parameters/{SampleAppParameters.swift => SampleAppArguments.swift} (70%) create mode 100644 Samples/DocCMiddleware/Protocols/AppArguments.swift diff --git a/Samples/DocCMiddleware/Parameters/SampleAppParameters.swift b/Samples/DocCMiddleware/Parameters/SampleAppArguments.swift similarity index 70% rename from Samples/DocCMiddleware/Parameters/SampleAppParameters.swift rename to Samples/DocCMiddleware/Parameters/SampleAppArguments.swift index acb4ae4..86afa3d 100644 --- a/Samples/DocCMiddleware/Parameters/SampleAppParameters.swift +++ b/Samples/DocCMiddleware/Parameters/SampleAppArguments.swift @@ -13,25 +13,31 @@ import protocol ArgumentParser.ParsableArguments import struct ArgumentParser.Option +import struct Logging.Logger extension SampleApp { - /// A type that conforms to the `ParsableArguments` protocol, which contains the input parameters required for the execution of the sample executable. - struct Parameters: ParsableArguments { + /// A type that conforms to the ``AppArguments`` and the `ParsableArguments` protocols, which contains the input parameters required for the + /// execution of the sample executable. + struct Arguments: AppArguments, ParsableArguments { // MARK: Properties - /// A label given to the sample app to identify it within a communications channel. @Option( name: .shortAndLong, help: "A label given to the sample app for the sole purpose of identification within a communications channel." ) var hostname: String = "127.0.0.1" - /// A port number assigned to the sample app from where the app either sends or receives data. @Option( name: .shortAndLong, help: "A port number assigned to the sample app from where the app either sends or receives data." ) var port: Int = 8080 + + @Option( + name: .long, + help: "A log level to configure in a type that interacts with the logging system." + ) + var logLevel: Logger.Level? } } diff --git a/Samples/DocCMiddleware/Protocols/AppArguments.swift b/Samples/DocCMiddleware/Protocols/AppArguments.swift new file mode 100644 index 0000000..9afafe4 --- /dev/null +++ b/Samples/DocCMiddleware/Protocols/AppArguments.swift @@ -0,0 +1,40 @@ +// ===----------------------------------------------------------------------=== +// +// This source file is part of the Hummingbird DocC Middleware open source project +// +// Copyright (c) 2025 Röck+Cöde VoF. and the Hummingbird DocC Middleware project authors +// Licensed under the EUPL 1.2 or later. +// +// See LICENSE for license information +// See CONTRIBUTORS for the list of Hummingbird DocC Middleware project authors +// +// ===----------------------------------------------------------------------=== + +import protocol ArgumentParser.ExpressibleByArgument + +import struct Logging.Logger + +/// A protocol that defines the input arguments the sample executable requires to run. +protocol AppArguments { + + // MARK: Properties + + /// A label given to the sample app to identify it within a communications channel. + var hostname: String { get } + + /// A port number assigned to the sample app from where the app either sends or receives data. + var port: Int { get } + + /// A log level to configure in a type that interacts with the logging system. + var logLevel: Logger.Level? { get } + +} + +// MARK: - Conformances + +/// Extends the `Logger.Level` type so it can be used as an argument. +#if hasFeature(RetroactiveAttribute) +extension Logger.Level: @retroactive ExpressibleByArgument {} +#else +extension Logger.Level: ExpressibleByArgument {} +#endif diff --git a/Samples/DocCMiddleware/SampleApp.swift b/Samples/DocCMiddleware/SampleApp.swift index e8ca588..69e1620 100644 --- a/Samples/DocCMiddleware/SampleApp.swift +++ b/Samples/DocCMiddleware/SampleApp.swift @@ -18,7 +18,7 @@ import struct ArgumentParser.OptionGroup // MARK: Properties /// A type that contains all the necessary input parameters to run the sample executable. - @OptionGroup var parameters: Parameters + @OptionGroup var arguments: Arguments } diff --git a/Tests/DocCMiddleware/Types/Extensions/Logger+Helpers.swift b/Tests/DocCMiddleware/Types/Extensions/Logger+Helpers.swift index d0cec00..70e6b5f 100644 --- a/Tests/DocCMiddleware/Types/Extensions/Logger+Helpers.swift +++ b/Tests/DocCMiddleware/Types/Extensions/Logger+Helpers.swift @@ -53,5 +53,5 @@ extension Logger { private extension String { /// A label to assign to a test logger instance. - static let loggerLabel = "test.hummingbird-docc-middleware.logger" + static let loggerLabel = "test.hummingbird-docc.logger" }