diff --git a/cmd/generate-bindings/solana/solana.go b/cmd/generate-bindings/solana/solana.go index 706da3d1..8f6205ae 100644 --- a/cmd/generate-bindings/solana/solana.go +++ b/cmd/generate-bindings/solana/solana.go @@ -89,8 +89,11 @@ func (h *handler) ResolveInputs(v *viper.Viper) (Inputs, error) { idlPath = filepath.Join(projectRoot, "contracts", "solana", "src", "idl") } - // Output path is contracts/{chainFamily}/src/generated/ under projectRoot - outPath := filepath.Join(projectRoot, "contracts", "solana", "src", "generated") + // Resolve output path with fallback to contracts/solana/src/generated/ + outPath := v.GetString("out") + if outPath == "" { + outPath = filepath.Join(projectRoot, "contracts", "solana", "src", "generated") + } return Inputs{ ProjectRoot: projectRoot, diff --git a/cmd/generate-bindings/solana/solana_test.go b/cmd/generate-bindings/solana/solana_test.go index 8ab3101e..e3eebfa9 100644 --- a/cmd/generate-bindings/solana/solana_test.go +++ b/cmd/generate-bindings/solana/solana_test.go @@ -62,6 +62,41 @@ func TestResolveSolanaInputs_DefaultFallbacks(t *testing.T) { assert.Equal(t, expectedOut, actualOut) } +func TestResolveSolanaInputs_CustomOutPath(t *testing.T) { + tempDir, err := os.MkdirTemp("", "generate-bindings-test") + require.NoError(t, err) + defer os.RemoveAll(tempDir) + + contractsDir := filepath.Join(tempDir, "contracts") + err = os.MkdirAll(contractsDir, 0755) + require.NoError(t, err) + + originalDir, err := os.Getwd() + require.NoError(t, err) + defer func() { + if err := os.Chdir(originalDir); err != nil { + t.Errorf("Failed to restore original directory: %v", err) + } + }() + + err = os.Chdir(tempDir) + require.NoError(t, err) + + customOut := filepath.Join(tempDir, "my-custom-output") + + v := viper.New() + v.Set("language", "go") + v.Set("out", customOut) + + runtimeCtx := &runtime.Context{} + handler := newHandler(runtimeCtx) + + inputs, err := handler.ResolveInputs(v) + require.NoError(t, err) + + assert.Equal(t, customOut, inputs.OutPath) +} + func TestProcessSolanaSingleIdl(t *testing.T) { // Create a temporary directory structure tempDir, err := os.MkdirTemp("", "generate-bindings-test")