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

    for i in ${COMP_WORDS[@]}
    do
        case "${i}" in
            "$1")
                cmd="wormhole__rs"
                ;;
            completion)
                cmd+="__completion"
                ;;
            connect)
                cmd+="__connect"
                ;;
            forward)
                cmd+="__forward"
                ;;
            help)
                cmd+="__help"
                ;;
            receive)
                cmd+="__receive"
                ;;
            send)
                cmd+="__send"
                ;;
            send-many)
                cmd+="__send__many"
                ;;
            serve)
                cmd+="__serve"
                ;;
            *)
                ;;
        esac
    done

    case "${cmd}" in
        wormhole__rs)
            opts="-V -v -h --version --verbose --help send send-many receive 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 -v -h --version --verbose --help <SHELL>"
            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 -v -h --version --verbose --help serve 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 -h -V -v --port --bind --yes --noconfirm --relay --relay-server --rendezvous-server --force-direct --force-relay --help --version --verbose <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=($(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
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        wormhole__rs__forward__serve)
            opts="-c -h -V -v --relay --relay-server --rendezvous-server --force-direct --force-relay --code --code-length --help --version --verbose <[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 -v -h --version --verbose --help"
            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="-h -V -v --yes --noconfirm --relay --relay-server --rendezvous-server --force-direct --force-relay --name --rename --out-dir --help --version --verbose <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
                    ;;
                --rename)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --name)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --out-dir)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        wormhole__rs__send)
            opts="-c -h -V -v --relay --relay-server --rendezvous-server --force-direct --force-relay --code --code-length --name --rename --help --version --verbose <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 -h -V -v --tries --timeout --relay --relay-server --rendezvous-server --force-direct --force-relay --code --code-length --name --rename --help --version --verbose <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
}

complete -F _wormhole-rs -o bashdefault -o default wormhole-rs
