Skip to main content

jig_sqlx/
lib.rs

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}