{
	// Place your aspm workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and 
	// description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope 
	// is left empty or omitted, the snippet gets applied to all languages. The prefix is what is 
	// used to trigger the snippet and the body will be expanded and inserted. Possible variables are: 
	// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. 
	// Placeholders with the same ids are connected.
	// Example:
	// "Print to console": {
	// 	"scope": "javascript,typescript",
	// 	"prefix": "log",
	// 	"body": [
	// 		"console.log('$1');",
	// 		"$2"
	// 	],
	// 	"description": "Log output to console"
	// }
	"Create aspm subcommand": {
		"scope": "rust",
		"prefix": "subcommand",
		"body": [
			"use clap::Parser;",
			"",
			"use crate::commands::AspmSubcommand;",
			"",
			"/// $2",
			"#[derive(Parser, Debug)]",
			"pub struct $1Command { }",
			"",
			"#[async_trait::async_trait]",
			"impl AspmSubcommand for $1Command {",
			"\tasync fn execute(&self, state: crate::AspmState) -> Result<(), anyhow::Error> {",
			"\t\t",
			"\t\t",
			"\t\tOk(())",
			"\t}",
			"}",
		],
		"description": "Create a template for an aspm subcommand"
	}
}