Feature or enhancement request details
The principal issue here is that it was decided to not expose any properties of commands for the purposes of Plugin development (see #603). Because of that, passing down OptionGroups can look like the following:
@OptionGroupvarmanagementFlags:Flags.Managementmutatingfunc run2()asyncthrows{vararguments:[String]=["hello-world"]
// Expand managementFlags into CLI arguments
if managementFlags.detach {
arguments.append("--detach")}iflet entryPoint = managementFlags.entryPoint {
arguments.append(contentsOf:["--entrypoint", entryPoint])}formountin managementFlags.mounts {
arguments.append(contentsOf:["--mount", mount])}forportin managementFlags.publishPorts {
arguments.append(contentsOf:["--publish", port])}forsocketin managementFlags.publishSockets {
arguments.append(contentsOf:["--publish-socket", socket])}fortmpin managementFlags.tmpFs {
arguments.append(contentsOf:["--tmpfs", tmp])}iflet name = managementFlags.name {
arguments.append(contentsOf:["--name", name])}if managementFlags.remove {
arguments.append("--rm")}iflet platform = managementFlags.platform {
arguments.append(contentsOf:["--platform", platform])}
arguments.append(contentsOf:["--os", managementFlags.os])
arguments.append(contentsOf:["--arch", managementFlags.arch])forvolin managementFlags.volumes {
arguments.append(contentsOf:["--volume", vol])}iflet kernel = managementFlags.kernel {
arguments.append(contentsOf:["--kernel", kernel])}fornetworkin managementFlags.networks {
arguments.append(contentsOf:["--network", network])}if !managementFlags.cidfile.isEmpty {
arguments.append(contentsOf:["--cidfile", managementFlags.cidfile])}if managementFlags.dnsDisabled {
arguments.append("--no-dns")}fordnsin managementFlags.dnsNameservers {
arguments.append(contentsOf:["--dns", dns])}iflet domain = managementFlags.dnsDomain {
arguments.append(contentsOf:["--dns-domain", domain])}forsearchin managementFlags.dnsSearchDomains {
arguments.append(contentsOf:["--dns-search", search])}foroptionin managementFlags.dnsOptions {
arguments.append(contentsOf:["--dns-option", option])}forlabelin managementFlags.labels {
arguments.append(contentsOf:["--label", label])}if managementFlags.virtualization {
arguments.append("--virtualization")}if managementFlags.ssh {
arguments.append("--ssh")}
// Now parse with all expanded args
varcreateCommand=tryApplication.ContainerCreate.parse(arguments)tryawait createCommand.run()}This also makes it so developers have to manually add support when new options are added rather than just a requirement of recompiling (which is far more likely to speed up adoption in plugins).
To address this issue, I would like to propose the development of a macro that synthesizes a function called asParsableArguments and returns an array of arguments for the option group and can then be passed along when desirable.
Thoughts?
Code of Conduct
Feature or enhancement request details
The principal issue here is that it was decided to not expose any properties of commands for the purposes of Plugin development (see #603). Because of that, passing down OptionGroups can look like the following:
This also makes it so developers have to manually add support when new options are added rather than just a requirement of recompiling (which is far more likely to speed up adoption in plugins).
To address this issue, I would like to propose the development of a macro that synthesizes a function called asParsableArguments and returns an array of arguments for the option group and can then be passed along when desirable.
Thoughts?
Code of Conduct