// Copyright 2026 International Digital Economy Academy
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
///|
/// Declarative argument group constructor.
struct ArgGroup {
name : String
required : Bool
multiple : Bool
args : Array[String]
requires : Array[String]
conflicts_with : Array[String]
} derive(@debug.Debug)
///|
/// Create an argument group.
///
/// Notes:
/// - `required=true` means at least one member of the group must be present.
/// - `multiple=false` means group members are mutually exclusive.
/// - `requires` and `conflicts_with` may reference either group names or
/// argument names.
#alias(new, deprecated="Use `ArgGroup()` instead")
pub fn ArgGroup::ArgGroup(
name : StringView,
required? : Bool = false,
multiple? : Bool = true,
args? : ArrayView[String] = [],
requires? : ArrayView[String] = [],
conflicts_with? : ArrayView[String] = [],
) -> ArgGroup {
{
name: name.to_owned(),
required,
multiple,
args: args.to_owned(),
requires: requires.to_owned(),
conflicts_with: conflicts_with.to_owned(),
}
}