#!/bin/bash

set -euo pipefail

component="${1}"

if ! rustup component add "${component}" 2>/dev/null; then
    # If the component is unavailable on the latest nightly,
    # use the latest toolchain with the component available.
    # Refs: https://github.com/rust-lang/rustup-components-history#the-web-part
    target=$(curl -sSf "https://rust-lang.github.io/rustup-components-history/x86_64-unknown-linux-gnu/${component}")
    echo "'${component}' is unavailable on the default toolchain, use the toolchain 'nightly-${target}' instead"

    . ci/install-rust.sh "nightly-${target}"

    rustup component add "${component}"
fi

case "${component}" in
    rustfmt) "${component}" -V ;;
    *) cargo "${component}" -V ;;
esac
