Skip to content

Commit 132735c

Browse files
authored
feat: add SubcommandDeclarationBuilder interface (#315)
* feat: add SubCommandDeclaration interface * feat: add registerSubCommand method to CommandDeclarationBuilder * feat: add export for SubCommandDeclaration in api.dart
1 parent c04b6c4 commit 132735c

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

lib/api.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export 'package:mineral/src/api/common/commands/command_helper.dart';
2727
export 'package:mineral/src/api/common/commands/command_option.dart';
2828
export 'package:mineral/src/api/common/commands/command_option_type.dart';
2929
export 'package:mineral/src/api/common/commands/command_type.dart';
30+
export 'package:mineral/src/api/common/commands/sub_command_declaration.dart';
3031
export 'package:mineral/src/api/common/components/action_row.dart';
3132
export 'package:mineral/src/api/common/components/attached_file.dart';
3233
// Commons

lib/src/api/common/commands/builder/command_declaration_builder.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:mineral/src/api/common/commands/command_context_type.dart';
55
import 'package:mineral/src/api/common/commands/command_helper.dart';
66
import 'package:mineral/src/api/common/commands/command_option.dart';
77
import 'package:mineral/src/api/common/commands/command_type.dart';
8+
import 'package:mineral/src/api/common/commands/sub_command_declaration.dart';
89
import 'package:mineral/src/domains/commands/command_builder.dart';
910
import 'package:mineral/src/infrastructure/io/exceptions/missing_method_exception.dart';
1011
import 'package:mineral/src/infrastructure/io/exceptions/missing_property_exception.dart';
@@ -71,6 +72,18 @@ final class CommandDeclarationBuilder implements CommandBuilder {
7172
return this;
7273
}
7374

75+
CommandDeclarationBuilder registerSubCommand(Function subCommandFactory) {
76+
final instance = subCommandFactory();
77+
78+
if (instance is! SubCommandDeclaration) {
79+
throw Exception('Factory must return a SubCommandDeclaration instance');
80+
}
81+
82+
final builder = instance.build();
83+
subCommands.add(builder);
84+
return this;
85+
}
86+
7487
CommandDeclarationBuilder createGroup(Function(CommandGroupBuilder) group) {
7588
final builder = CommandGroupBuilder();
7689
group(builder);
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import 'package:mineral/src/api/common/commands/builder/sub_command_builder.dart';
2+
import 'package:mineral/src/domains/common/utils/listenable.dart';
3+
4+
abstract interface class SubCommandDeclaration implements Listenable {
5+
SubCommandBuilder build();
6+
}

0 commit comments

Comments
 (0)