_wormhole-rs() {
    local i cur prev opts cmd
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    cmd=""
    opts=""

    for i in ${COMP_WORDS[@]}
    do
        case "${cmd},${i}" in
            ",$1")
                cmd="wormhole__rs"
                ;;
            wormhole__rs,completion)
                cmd="wormhole__rs__completion"
                ;;
            wormhole__rs,forward)
                cmd="wormhole__rs__forward"
                ;;
            wormhole__rs,help)
                cmd="wormhole__rs__help"
                ;;
            wormhole__rs,receive)
                cmd="wormhole__rs__receive"
                ;;
            wormhole__rs,rx)
                cmd="wormhole__rs__receive"
                ;;
            wormhole__rs,send)
                cmd="wormhole__rs__send"
                ;;
            wormhole__rs,send-many)
                cmd="wormhole__rs__send__many"
                ;;
            wormhole__rs,tx)
                cmd="wormhole__rs__send"
                ;;
            wormhole__rs__forward,connect)
                cmd="wormhole__rs__forward__connect"
                ;;
            wormhole__rs__forward,open)
                cmd="wormhole__rs__forward__serve"
                ;;
            wormhole__rs__forward,serve)
                cmd="wormhole__rs__forward__serve"
                ;;
            *)
                ;;
        esac
    done

    case "${cmd}" in
        wormhole__rs)
            opts="-v -h -V --verbose --help --version send tx receive rx send-many forward completion help"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        wormhole__rs__completion)
            opts="-v -h -V --verbose --help --version bash elvish fish powershell zsh"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        wormhole__rs__forward)
            opts="-v -h -V --verbose --help --version serve open connect"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        wormhole__rs__forward__connect)
            opts="-p -v -h -V --port --bind --yes --noconfirm --relay --relay-server --rendezvous-server --force-direct --force-relay --verbose --help --version [CODE]"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                --port)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -p)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --bind)
                    COMPREPLY=("${cur}")
                    if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then
                        compopt -o nospace
                    fi
                    return 0
                    ;;
                --relay-server)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --relay)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --rendezvous-server)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        wormhole__rs__forward__serve)
            opts="-c -v -h -V --relay --relay-server --rendezvous-server --force-direct --force-relay --code --code-length --verbose --help --version <[DOMAIN:]PORT>..."
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                --relay-server)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --relay)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --rendezvous-server)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --code)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --code-length)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -c)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        wormhole__rs__help)
            opts="-v -h -V --verbose --help --version"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        wormhole__rs__receive)
            opts="-v -h -V --yes --noconfirm --relay --relay-server --rendezvous-server --force-direct --force-relay --out-dir --verbose --help --version [CODE]"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                --relay-server)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --relay)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --rendezvous-server)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --out-dir)
                    COMPREPLY=()
                    if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then
                        compopt -o plusdirs
                    fi
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        wormhole__rs__send)
            opts="-c -v -h -V --relay --relay-server --rendezvous-server --force-direct --force-relay --code --code-length --name --rename --verbose --help --version <FILENAME|DIRNAME>..."
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                --relay-server)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --relay)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --rendezvous-server)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --code)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --code-length)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -c)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --rename)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --name)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        wormhole__rs__send__many)
            opts="-n -c -v -h -V --tries --timeout --relay --relay-server --rendezvous-server --force-direct --force-relay --code --code-length --name --rename --verbose --help --version <FILENAME|DIRNAME>..."
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                --tries)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -n)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --timeout)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --relay-server)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --relay)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --rendezvous-server)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --code)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --code-length)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                -c)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --rename)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --name)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
    esac
}

if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then
    complete -F _wormhole-rs -o nosort -o bashdefault -o default wormhole-rs
else
    complete -F _wormhole-rs -o bashdefault -o default wormhole-rs
fi
