#!/bin/sh

install_rust() {
    if ! (which ~/.cargo/bin/rustup > /dev/null)
    then
        echo "installing rustup"
        curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
    fi

    echo "rustup ✓"
}

update_rust() {
    ~/.cargo/bin/rustup update > /dev/null 2>&1
    rust_version=$(~/.cargo/bin/rustc --version | awk '{print $2}')

    echo "latest rust: $rust_version ✓"
}

download_rust_analyzer() {
    if ! (which rust-analyzer > /dev/null)
    then
        echo "downloading rust analyzer"
        rust_analyzer_bin=/usr/local/bin/rust-analyzer
        curl -s -L https://github.com/rust-analyzer/rust-analyzer/releases/latest/download/rust-analyzer-mac -o $rust_analyzer_bin
        chmod +x $rust_analyzer_bin
    fi

    echo "rust-analyzer ✓"
}

# cargo-edit: quickly add and remove packages
# whatfeatures: see optional features for a package
install_cargos() {
    set -- \
        'cargo-edit' \
        'cargo-whatfeatures'
    for program do
        cargo install "$program"
    done

    echo "cargos ✓"
}

install_rust
update_rust
download_rust_analyzer
install_cargos