#!/bin/bash

output_path=lib/binding_rust/bindings.rs
header_path=lib/include/tree_sitter/api.h
no_derive_copy=(
  TSInput
  TSLanguage
  TSLogger
  TSLookaheadIterator
  TSParser
  TSTree
  TSQuery
  TSQueryCursor
  TSQueryCapture
  TSQueryMatch
  TSQueryPredicateStep
)
no_copy=$(IFS='|'; echo "${no_derive_copy[*]}")

file_version=$(head -n1 "$output_path" | cut -d' ' -f6)
tool_version=$(bindgen --version | cut -d' ' -f2)
higher_version=$(printf '%s\n' "$file_version" "$tool_version" | sort -V | tail -n1)

if [[ "$higher_version" != "$tool_version" ]]; then
  printf 'Latest used bindgen version was %s\n' "$file_version" >&2
  printf 'Currently installed bindgen CLI version is %s\n\n' "$tool_version" >&2
  # shellcheck disable=SC2016
  printf 'You must upgrade bindgen CLI first with `cargo install bindgen-cli`\n' >&2
  exit 1
fi

bindgen                                        \
  --no-layout-tests                            \
  --allowlist-type '^TS.*'                     \
  --allowlist-function '^ts_.*'                \
  --allowlist-var '^TREE_SITTER.*'             \
  --blocklist-type '^__.*'                     \
  --no-prepend-enum-name                       \
  --no-copy "$no_copy"                         \
  --use-core                                   \
  "$header_path"                               \
  --                                           \
  -D TREE_SITTER_FEATURE_WASM                  \
  > "$output_path"
