aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe-external-packages/src/symfony/console/attribute/as_command.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe-external-packages/src/symfony/console/attribute/as_command.rs')
-rw-r--r--crates/shirabe-external-packages/src/symfony/console/attribute/as_command.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/crates/shirabe-external-packages/src/symfony/console/attribute/as_command.rs b/crates/shirabe-external-packages/src/symfony/console/attribute/as_command.rs
new file mode 100644
index 0000000..c742fd5
--- /dev/null
+++ b/crates/shirabe-external-packages/src/symfony/console/attribute/as_command.rs
@@ -0,0 +1,34 @@
+/// Service tag to autoconfigure commands.
+///
+/// PHP attribute: #[\Attribute(\Attribute::TARGET_CLASS)]
+#[derive(Debug)]
+pub struct AsCommand {
+ pub name: String,
+ pub description: Option<String>,
+}
+
+impl AsCommand {
+ pub fn new(
+ name: String,
+ description: Option<String>,
+ aliases: Vec<String>,
+ hidden: bool,
+ ) -> Self {
+ let mut this = Self { name, description };
+
+ if !hidden && aliases.is_empty() {
+ return this;
+ }
+
+ let mut name: Vec<String> = this.name.split('|').map(|s| s.to_string()).collect();
+ name.extend(aliases);
+
+ if hidden && "" != name[0] {
+ name.insert(0, String::new());
+ }
+
+ this.name = name.join("|");
+
+ this
+ }
+}