1use jig_contract::{FeatureContext, FeatureDescriptor, NativeToolDescriptor, NativeToolKind, tool};
2
3const MIGRATION_ADD_COMMAND: &str = "migration_add_command";
4const SCHEMA_CHECK_COMMAND: &str = "schema_check_command";
5const SCHEMA_DUMP_COMMAND: &str = "schema_dump_command";
6const SQLX_CHECK_COMMAND: &str = "sqlx_check_command";
7const COMMAND_KEYS: &[&str] = &[
8 MIGRATION_ADD_COMMAND,
9 SCHEMA_CHECK_COMMAND,
10 SCHEMA_DUMP_COMMAND,
11 SQLX_CHECK_COMMAND,
12];
13const NATIVE_TOOLS: &[NativeToolDescriptor] = &[
14 NativeToolDescriptor::new(tool::MIGRATION_ADD, true, NativeToolKind::MigrationAdd),
15 NativeToolDescriptor::new(tool::SCHEMA_CHECK, false, NativeToolKind::SchemaCheck),
16];
17
18pub const FEATURE: FeatureDescriptor = FeatureDescriptor::new(
19 COMMAND_KEYS,
20 NATIVE_TOOLS,
21 required_tools,
22 unavailable_tool_message,
23);
24
25fn required_tools(ctx: &dyn FeatureContext) -> Vec<&'static str> {
26 let mut required = Vec::new();
27 let sqlx_enabled = ctx.sqlx_enabled();
28 let schema_dump_enabled = sqlx_enabled && ctx.schema_dump_enabled();
29
30 if sqlx_enabled || ctx.has_required_command(SQLX_CHECK_COMMAND) {
31 required.push(tool::SQLX_CHECK);
32 }
33 if sqlx_enabled || ctx.has_required_command(MIGRATION_ADD_COMMAND) {
34 required.push(tool::MIGRATION_ADD);
35 }
36 if schema_dump_enabled || ctx.has_required_command(SCHEMA_CHECK_COMMAND) {
37 required.push(tool::SCHEMA_CHECK);
38 }
39 if schema_dump_enabled || ctx.has_required_command(SCHEMA_DUMP_COMMAND) {
40 required.push(tool::SCHEMA_DUMP);
41 }
42 required
43}
44
45fn unavailable_tool_message(ctx: &dyn FeatureContext, tool_name: &str) -> Option<String> {
46 match tool_name {
47 tool::SCHEMA_CHECK | tool::SCHEMA_DUMP if !ctx.sqlx_enabled() => Some(format!(
48 "{tool_name} is not available because sqlx_enabled = false in .jig.toml. Enable SQLx and schema dumps, then run `jig update --recopy`, or remove this command/gate."
49 )),
50 tool::SCHEMA_CHECK | tool::SCHEMA_DUMP if !ctx.schema_dump_enabled() => Some(format!(
51 "{tool_name} is not available because schema_dump_enabled = false in .jig.toml. Enable schema dumps, then run `jig update --recopy`, or remove this command/gate."
52 )),
53 tool::SQLX_CHECK | tool::MIGRATION_ADD if !ctx.sqlx_enabled() => Some(format!(
54 "{tool_name} is not available because sqlx_enabled = false in .jig.toml. Enable SQLx, then run `jig update --recopy`, or remove this command/gate."
55 )),
56 _ => None,
57 }
58}