// WARN: This file is auto generated by xtask
const OPTIONS_TEXT: &str = r"Options:
      --abstract-unix-socket <path>     Connect via abstract Unix domain socket
      --alt-svc <file name>     Enable alt-svc with this cache file
      --anyauth             Pick any authentication method
  -a, --append              Append to target file when uploading
      --basic               Use HTTP Basic Authentication
      --cacert <file>       CA certificate to verify peer against
      --capath <dir>        CA directory to verify peer against
  -E, --cert <certificate[:password]>   Client certificate file and password
      --cert-status         Verify the status of the server certificate
      --cert-type <type>    Certificate file type (DER/PEM/ENG)
      --ciphers <list of ciphers>   SSL ciphers to use
      --compressed          Request compressed response
      --compressed-ssh      Enable SSH compression
  -K, --config <file>       Read config from a file
      --connect-timeout <seconds>   Maximum time allowed for connection
      --connect-to <HOST1:PORT1:HOST2:PORT2>    Connect to host
  -C, --continue-at <offset>    Resumed transfer offset
  -b, --cookie <data|filename>  Send cookies from string/file
  -c, --cookie-jar <filename>   Write cookies to <filename> after operation
      --create-dirs         Create necessary local directory hierarchy
      --crlf                Convert LF to CRLF in upload
      --crlfile <file>      Get a CRL list in PEM format from the given file
  -d, --data <data>         HTTP POST data
      --data-ascii <data>   HTTP POST ASCII data
      --data-binary <data>  HTTP POST binary data
      --data-raw <data>     HTTP POST data  '@' allowed
      --data-urlencode <data>   HTTP POST data url encoded
      --delegation <LEVEL>  GSS-API delegation permission
      --digest              Use HTTP Digest Authentication
  -q, --disable             Disable .curlrc
      --disable-eprt        Inhibit using EPRT or LPRT
      --disable-epsv        Inhibit using EPSV
      --disallow-username-in-url    Disallow username in url
      --dns-interface <interface>   Interface to use for DNS requests
      --dns-ipv4-addr <address>     IPv4 address to use for DNS requests
      --dns-ipv6-addr <address>     IPv6 address to use for DNS requests
      --dns-servers <addresses>     DNS server addrs to use
      --doh-url <URL>       Resolve host names over DOH
  -D, --dump-header <filename>      Write the received headers to <filename>
      --egd-file <file>     EGD socket path for random data
      --engine <name>       Crypto engine to use
      --etag-save <file>    Get an ETag from response header and save it to a FILE
      --etag-compare <file> Get an ETag from a file and send a conditional request
      --expect100-timeout <seconds>     How long to wait for 100-continue
  -f, --fail                Fail silently (no output at all) on HTTP errors
      --fail-early          Fail on first transfer error  do not continue
      --false-start         Enable TLS False Start
  -F, --form <name=content>         Specify multipart MIME data
      --form-string <name=string>   Specify multipart MIME data
      --ftp-account <data>          Account data string
      --ftp-alternative-to-user <command>   String to replace USER [name]
      --ftp-create-dirs     Create the remote dirs if not present
      --ftp-method <method> Control CWD usage
      --ftp-pasv            Use PASV/EPSV instead of PORT
  -P, --ftp-port <address>  Use PORT instead of PASV
      --ftp-pret            Send PRET before PASV
      --ftp-skip-pasv-ip    Skip the IP address for PASV
      --ftp-ssl-ccc         Send CCC after authenticating
      --ftp-ssl-ccc-mode <active/passive>   Set CCC mode
      --ftp-ssl-control     Require SSL/TLS for FTP login  clear for transfer
  -G, --get                 Put the post data in the URL and use GET
  -g, --globoff             Disable URL sequences and ranges using {} and []
      --happy-eyeballs-timeout-ms <milliseconds>    How long to wait in milliseconds for IPv6 before trying IPv4
      --haproxy-protocol    Send HAProxy PROXY protocol v1 header
  -I, --head                Show document info only
  -h, --header <header/@file>   Pass custom header(s) to server
      --hostpubmd5 <md5>    Acceptable MD5 hash of the host public key
      --http0.9             Allow HTTP 0.9 responses
  -0, --http1.0             Use HTTP 1.0
      --http1.1             Use HTTP 1.1
      --http2               Use HTTP 2
      --http2-prior-knowledge   Use HTTP 2 without HTTP/1.1 Upgrade
      --http3               Use HTTP v3
      --ignore-content-length   Ignore the size of the remote resource
  -i, --include             Include protocol response headers in the output
  -k, --insecure            Allow insecure server connections when using SSL
      --interface <name>    Use network INTERFACE (or address)
  -4, --ipv4                Resolve names to IPv4 addresses
  -6, --ipv6                Resolve names to IPv6 addresses
  -j, --junk-session-cookies        Ignore session cookies read from file
      --keepalive-time <seconds>    Interval time for keepalive probes
      --key <key>           Private key file name
      --key-type <type>     Private key file type (DER/PEM/ENG)
      --krb <level>         Enable Kerberos with security <level>
      --libcurl <file>      Dump libcurl equivalent code of this command line
      --limit-rate <speed>  Limit transfer speed to RATE
  -l, --list-only           List only mode
      --local-port <num/range>  Force use of RANGE for local port numbers
  -L, --location            Follow redirects
      --location-trusted    Like --location  and send auth to other hosts
      --login-options <options>     Server login options
      --mail-auth <address> Originator address of the original email
      --mail-from <address> Mail from this address
      --mail-rcpt <address> Mail to this address
  -M, --manual              Display the full manual
      --max-filesize <bytes>    Maximum file size to download
      --max-redirs <num>    Maximum number of redirects allowed
  -m, --max-time <seconds>  Maximum time allowed for the transfer
      --metalink            Process given URLs as metalink XML file
      --negotiate           Use HTTP Negotiate (SPNEGO) authentication
  -n, --netrc               Must read .netrc for user name and password
      --netrc-file <filename>   Specify FILE for netrc
      --netrc-optional      Use either .netrc or URL
  -:, --next                Make next URL use its separate set of options
      --no-alpn             Disable the ALPN TLS extension
  -N, --no-buffer           Disable buffering of the output stream
      --no-keepalive        Disable TCP keepalive on the connection
      --no-npn              Disable the NPN TLS extension
      --no-progress-meter   Do not show the progress meter
      --no-sessionid        Disable SSL session-ID reusing
      --noproxy <no-proxy-list>     List of hosts which do not use proxy
      --ntlm                Use HTTP NTLM authentication
      --ntlm-wb             Use HTTP NTLM authentication with winbind
      --oauth2-bearer <token>   OAuth 2 Bearer Token
  -o, --output <file>       Write to file instead of stdout
  -Z, --parallel            Perform transfers in parallel
      --parallel-immediate  Do not wait for multiplexing (with --parallel)
      --parallel-max        Maximum concurrency for parallel transfers
      --pass <phrase>       Pass phrase for the private key
      --path-as-is          Do not squash .. sequences in URL path
      --pinnedpubkey <hashes>   FILE/HASHES Public key to verify peer against
      --post301             Do not switch to GET after following a 301
      --post302             Do not switch to GET after following a 302
      --post303             Do not switch to GET after following a 303
      --preproxy <[protocol://]host[:port]>     Use this proxy first
  -#, --progress-bar        Display transfer progress as a bar
      --proto <protocols>   Enable/disable PROTOCOLS
      --proto-default <protocol>        Use PROTOCOL for any URL missing a scheme
      --proto-redir <protocols>         Enable/disable PROTOCOLS on redirect
  -x, --proxy <[protocol://]host[:port]>    Use this proxy
      --proxy-anyauth       Pick any proxy authentication method
      --proxy-basic         Use Basic authentication on the proxy
      --proxy-cacert <file>     CA certificate to verify peer against for proxy
      --proxy-capath <dir>      CA directory to verify peer against for proxy
      --proxy-cert <cert[:passwd]>  Set client certificate for proxy
      --proxy-cert-type <type>      Client certificate type for HTTPS proxy
      --proxy-ciphers <list>        SSL ciphers to use for proxy
      --proxy-crlfile <file>        Set a CRL list for proxy
      --proxy-digest        Use Digest authentication on the proxy
      --proxy-header <header/@file>     Pass custom header(s) to proxy
      --proxy-insecure      Do HTTPS proxy connections without verifying the proxy
      --proxy-key <key>     Private key for HTTPS proxy
      --proxy-key-type <type>       Private key file type for proxy
      --proxy-negotiate     Use HTTP Negotiate (SPNEGO) authentication on the proxy
      --proxy-ntlm          Use NTLM authentication on the proxy
      --proxy-pass <phrase>     Pass phrase for the private key for HTTPS proxy
      --proxy-pinnedpubkey <hashes>     FILE/HASHES public key to verify proxy with
      --proxy-service-name <name>   SPNEGO proxy service name
      --proxy-ssl-allow-beast       Allow security flaw for interop for HTTPS proxy
      --proxy-tls13-ciphers <list>  TLS 1.3 ciphersuites for proxy (OpenSSL)
      --proxy-tlsauthtype <type>    TLS authentication type for HTTPS proxy
      --proxy-tlspassword <string>  TLS password for HTTPS proxy
      --proxy-tlsuser <name>        TLS username for HTTPS proxy
      --proxy-tlsv1         Use TLSv1 for HTTPS proxy
  -U, --proxy-user <user:password>  Proxy user and password
      --proxy1.0 <host[:port]>      Use HTTP/1.0 proxy on given port
  -p, --proxytunnel         Operate through an HTTP proxy tunnel (using CONNECT)
      --pubkey <key>        SSH Public key file name
  -Q, --quote               Send command(s) to server before transfer
      --random-file <file>  File for reading random data from
  -r, --range <range>       Retrieve only the bytes within RANGE
      --raw                 Do HTTP 'raw'; no transfer decoding
  -e, --referer <URL>       Referrer URL
  -J, --remote-header-name  Use the header-provided filename
  -O, --remote-name         Write output to a file named as the remote file
      --remote-name-all     Use the remote file name for all URLs
  -R, --remote-time         Set the remote file's time on the local output
  -X, --request <command>   Specify request command to use
      --request-target      Specify the target for this request
      --resolve <host:port:address[ address]...>    Resolve the host+port to this address
      --retry <num>         Retry request if transient problems occur
      --retry-connrefused   Retry on connection refused (use with --retry)
      --retry-delay <seconds>       Wait time between retries
      --retry-max-time <seconds>    Retry only within this period
      --sasl-authzid <identity>     Use this identity to act as during SASL PLAIN authentication
      --sasl-ir             Enable initial response in SASL authentication
      --service-name <name> SPNEGO service name
  -S, --show-error          Show error even when -s is used
  -s, --silent              Silent mode
      --socks4 <host[:port]>    SOCKS4 proxy on given host + port
      --socks4a <host[:port]>   SOCKS4a proxy on given host + port
      --socks5 <host[:port]>    SOCKS5 proxy on given host + port
      --socks5-basic        Enable username/password auth for SOCKS5 proxies
      --socks5-gssapi       Enable GSS-API auth for SOCKS5 proxies
      --socks5-gssapi-nec   Compatibility with NEC SOCKS5 server
      --socks5-gssapi-service <name>    SOCKS5 proxy service name for GSS-API
      --socks5-hostname <host[:port]>   SOCKS5 proxy  pass host name to proxy
  -Y, --speed-limit <speed>     Stop transfers slower than this
  -y, --speed-time <seconds>    Trigger 'speed-limit' abort after this time
      --ssl                 Try SSL/TLS
      --ssl-allow-beast     Allow security flaw to improve interop
      --ssl-no-revoke       Disable cert revocation checks (Schannel)
      --ssl-reqd            Require SSL/TLS
  -2, --sslv2               Use SSLv2
  -3, --sslv3               Use SSLv3
      --stderr              Where to redirect stderr
      --styled-output       Enable styled output for HTTP headers
      --suppress-connect-headers    Suppress proxy CONNECT response headers
      --tcp-fastopen        Use TCP Fast Open
      --tcp-nodelay         Use the TCP_NODELAY option
  -t, --telnet-option <opt=val>     Set telnet option
      --tftp-blksize <value>        Set TFTP BLKSIZE option
      --tftp-no-options     Do not send any TFTP options
  -z, --time-cond <time>    Transfer based on a time condition
      --tls-max <VERSION>   Set maximum allowed TLS version
      --tls13-ciphers <list>    TLS 1.3 ciphersuites (OpenSSL)
      --tlsauthtype <type>  TLS authentication type
      --tlspassword         TLS password
      --tlsuser <name>      TLS user name
  -1, --tlsv1               Use TLSv1.0 or greater
      --tlsv1.0             Use TLSv1.0 or greater
      --tlsv1.1             Use TLSv1.1 or greater
      --tlsv1.2             Use TLSv1.2 or greater
      --tlsv1.3             Use TLSv1.3 or greater
      --tr-encoding         Request compressed transfer encoding
      --trace <file>        Write a debug trace to FILE
      --trace-ascii <file>  Like --trace  but without hex output
      --trace-time          Add time stamps to trace/verbose output
      --unix-socket <path>  Connect through this Unix domain socket
  -T, --upload-file <file>  Transfer local FILE to destination
      --url <url>           URL to work with
  -B, --use-ascii           Use ASCII/text transfer
  -u, --user <user:password>    Server user and password
  -A, --user-agent <name>   Send User-Agent <name> to server
  -v, --verbose             Make the operation more talkative
  -w, --write-out <format>  Use output FORMAT after completion
      --xattr               Store metadata in extended file attributes
  -H, --help                display this help and exit
  -V, --version             output version information and exit
";

#[repr(u8)]
#[derive(Debug, PartialEq)]
enum CmdOP {
    AbstractUnixSocket,
    AltSvc,
    Anyauth,
    Append,
    Basic,
    Cacert,
    Capath,
    Cert,
    CertStatus,
    CertType,
    Ciphers,
    Compressed,
    CompressedSsh,
    Config,
    ConnectTimeout,
    ConnectTo,
    ContinueAt,
    Cookie,
    CookieJar,
    CreateDirs,
    Crlf,
    Crlfile,
    Data,
    DataAscii,
    DataBinary,
    DataRaw,
    DataUrlencode,
    Delegation,
    Digest,
    Disable,
    DisableEprt,
    DisableEpsv,
    DisallowUsernameInUrl,
    DnsInterface,
    DnsIpv4Addr,
    DnsIpv6Addr,
    DnsServers,
    DohUrl,
    DumpHeader,
    EgdFile,
    Engine,
    EtagSave,
    EtagCompare,
    Expect100Timeout,
    Fail,
    FailEarly,
    FalseStart,
    Form,
    FormString,
    FtpAccount,
    FtpAlternativeToUser,
    FtpCreateDirs,
    FtpMethod,
    FtpPasv,
    FtpPort,
    FtpPret,
    FtpSkipPasvIp,
    FtpSslCcc,
    FtpSslCccMode,
    FtpSslControl,
    Get,
    Globoff,
    HappyEyeballsTimeoutMs,
    HaproxyProtocol,
    Head,
    Header,
    Hostpubmd5,
    Http0_9,
    Http1_0,
    Http1_1,
    Http2,
    Http2PriorKnowledge,
    Http3,
    IgnoreContentLength,
    Include,
    Insecure,
    Interface,
    Ipv4,
    Ipv6,
    JunkSessionCookies,
    KeepaliveTime,
    Key,
    KeyType,
    Krb,
    Libcurl,
    LimitRate,
    ListOnly,
    LocalPort,
    Location,
    LocationTrusted,
    LoginOptions,
    MailAuth,
    MailFrom,
    MailRcpt,
    Manual,
    MaxFilesize,
    MaxRedirs,
    MaxTime,
    Metalink,
    Negotiate,
    Netrc,
    NetrcFile,
    NetrcOptional,
    Next,
    NoAlpn,
    NoBuffer,
    NoKeepalive,
    NoNpn,
    NoProgressMeter,
    NoSessionid,
    Noproxy,
    Ntlm,
    NtlmWb,
    Oauth2Bearer,
    Output,
    Parallel,
    ParallelImmediate,
    ParallelMax,
    Pass,
    PathAsIs,
    Pinnedpubkey,
    Post301,
    Post302,
    Post303,
    Preproxy,
    ProgressBar,
    Proto,
    ProtoDefault,
    ProtoRedir,
    Proxy,
    ProxyAnyauth,
    ProxyBasic,
    ProxyCacert,
    ProxyCapath,
    ProxyCert,
    ProxyCertType,
    ProxyCiphers,
    ProxyCrlfile,
    ProxyDigest,
    ProxyHeader,
    ProxyInsecure,
    ProxyKey,
    ProxyKeyType,
    ProxyNegotiate,
    ProxyNtlm,
    ProxyPass,
    ProxyPinnedpubkey,
    ProxyServiceName,
    ProxySslAllowBeast,
    ProxyTls13Ciphers,
    ProxyTlsauthtype,
    ProxyTlspassword,
    ProxyTlsuser,
    ProxyTlsv1,
    ProxyUser,
    Proxy1_0,
    Proxytunnel,
    Pubkey,
    Quote,
    RandomFile,
    Range,
    Raw,
    Referer,
    RemoteHeaderName,
    RemoteName,
    RemoteNameAll,
    RemoteTime,
    Request,
    RequestTarget,
    Resolve,
    Retry,
    RetryConnrefused,
    RetryDelay,
    RetryMaxTime,
    SaslAuthzid,
    SaslIr,
    ServiceName,
    ShowError,
    Silent,
    Socks4,
    Socks4a,
    Socks5,
    Socks5Basic,
    Socks5Gssapi,
    Socks5GssapiNec,
    Socks5GssapiService,
    Socks5Hostname,
    SpeedLimit,
    SpeedTime,
    Ssl,
    SslAllowBeast,
    SslNoRevoke,
    SslReqd,
    Sslv2,
    Sslv3,
    Stderr,
    StyledOutput,
    SuppressConnectHeaders,
    TcpFastopen,
    TcpNodelay,
    TelnetOption,
    TftpBlksize,
    TftpNoOptions,
    TimeCond,
    TlsMax,
    Tls13Ciphers,
    Tlsauthtype,
    Tlspassword,
    Tlsuser,
    Tlsv1,
    Tlsv1_0,
    Tlsv1_1,
    Tlsv1_2,
    Tlsv1_3,
    TrEncoding,
    Trace,
    TraceAscii,
    TraceTime,
    UnixSocket,
    UploadFile,
    Url,
    UseAscii,
    User,
    UserAgent,
    Verbose,
    WriteOut,
    Xattr,
    Help,
    Version,
}

impl std::convert::From<OptNum> for CmdOP {
    fn from(value: OptNum) -> Self {
        unsafe { std::mem::transmute_copy(&value) }
    }
}
impl CmdOP {
    pub const fn to(self) -> OptNum {
        self as OptNum
    }
}

#[rustfmt::skip]
const OPT_ARY: [Opt;229] = [
    Opt { sho: 0u8,  lon: "abstract-unix-socket",has: Arg::Yes, num: CmdOP::AbstractUnixSocket.to(), },
    Opt { sho: 0u8,  lon: "alt-svc",       has: Arg::Yes, num: CmdOP::AltSvc.to(), },
    Opt { sho: 0u8,  lon: "anyauth",       has: Arg::No,  num: CmdOP::Anyauth.to(), },
    Opt { sho: b'a', lon: "append",        has: Arg::No,  num: CmdOP::Append.to(), },
    Opt { sho: 0u8,  lon: "basic",         has: Arg::No,  num: CmdOP::Basic.to(), },
    Opt { sho: 0u8,  lon: "cacert",        has: Arg::Yes, num: CmdOP::Cacert.to(), },
    Opt { sho: 0u8,  lon: "capath",        has: Arg::Yes, num: CmdOP::Capath.to(), },
    Opt { sho: b'E', lon: "cert",          has: Arg::Yes, num: CmdOP::Cert.to(), },
    Opt { sho: 0u8,  lon: "cert-status",   has: Arg::No,  num: CmdOP::CertStatus.to(), },
    Opt { sho: 0u8,  lon: "cert-type",     has: Arg::Yes, num: CmdOP::CertType.to(), },
    Opt { sho: 0u8,  lon: "ciphers",       has: Arg::Yes, num: CmdOP::Ciphers.to(), },
    Opt { sho: 0u8,  lon: "compressed",    has: Arg::No,  num: CmdOP::Compressed.to(), },
    Opt { sho: 0u8,  lon: "compressed-ssh",has: Arg::No,  num: CmdOP::CompressedSsh.to(), },
    Opt { sho: b'K', lon: "config",        has: Arg::Yes, num: CmdOP::Config.to(), },
    Opt { sho: 0u8,  lon: "connect-timeout",has: Arg::Yes, num: CmdOP::ConnectTimeout.to(), },
    Opt { sho: 0u8,  lon: "connect-to",    has: Arg::Yes, num: CmdOP::ConnectTo.to(), },
    Opt { sho: b'C', lon: "continue-at",   has: Arg::Yes, num: CmdOP::ContinueAt.to(), },
    Opt { sho: b'b', lon: "cookie",        has: Arg::Yes, num: CmdOP::Cookie.to(), },
    Opt { sho: b'c', lon: "cookie-jar",    has: Arg::Yes, num: CmdOP::CookieJar.to(), },
    Opt { sho: 0u8,  lon: "create-dirs",   has: Arg::No,  num: CmdOP::CreateDirs.to(), },
    Opt { sho: 0u8,  lon: "crlf",          has: Arg::No,  num: CmdOP::Crlf.to(), },
    Opt { sho: 0u8,  lon: "crlfile",       has: Arg::Yes, num: CmdOP::Crlfile.to(), },
    Opt { sho: b'd', lon: "data",          has: Arg::Yes, num: CmdOP::Data.to(), },
    Opt { sho: 0u8,  lon: "data-ascii",    has: Arg::Yes, num: CmdOP::DataAscii.to(), },
    Opt { sho: 0u8,  lon: "data-binary",   has: Arg::Yes, num: CmdOP::DataBinary.to(), },
    Opt { sho: 0u8,  lon: "data-raw",      has: Arg::Yes, num: CmdOP::DataRaw.to(), },
    Opt { sho: 0u8,  lon: "data-urlencode",has: Arg::Yes, num: CmdOP::DataUrlencode.to(), },
    Opt { sho: 0u8,  lon: "delegation",    has: Arg::Yes, num: CmdOP::Delegation.to(), },
    Opt { sho: 0u8,  lon: "digest",        has: Arg::No,  num: CmdOP::Digest.to(), },
    Opt { sho: b'q', lon: "disable",       has: Arg::No,  num: CmdOP::Disable.to(), },
    Opt { sho: 0u8,  lon: "disable-eprt",  has: Arg::No,  num: CmdOP::DisableEprt.to(), },
    Opt { sho: 0u8,  lon: "disable-epsv",  has: Arg::No,  num: CmdOP::DisableEpsv.to(), },
    Opt { sho: 0u8,  lon: "disallow-username-in-url",has: Arg::No,  num: CmdOP::DisallowUsernameInUrl.to(), },
    Opt { sho: 0u8,  lon: "dns-interface", has: Arg::Yes, num: CmdOP::DnsInterface.to(), },
    Opt { sho: 0u8,  lon: "dns-ipv4-addr", has: Arg::Yes, num: CmdOP::DnsIpv4Addr.to(), },
    Opt { sho: 0u8,  lon: "dns-ipv6-addr", has: Arg::Yes, num: CmdOP::DnsIpv6Addr.to(), },
    Opt { sho: 0u8,  lon: "dns-servers",   has: Arg::Yes, num: CmdOP::DnsServers.to(), },
    Opt { sho: 0u8,  lon: "doh-url",       has: Arg::Yes, num: CmdOP::DohUrl.to(), },
    Opt { sho: b'D', lon: "dump-header",   has: Arg::Yes, num: CmdOP::DumpHeader.to(), },
    Opt { sho: 0u8,  lon: "egd-file",      has: Arg::Yes, num: CmdOP::EgdFile.to(), },
    Opt { sho: 0u8,  lon: "engine",        has: Arg::Yes, num: CmdOP::Engine.to(), },
    Opt { sho: 0u8,  lon: "etag-compare",  has: Arg::Yes, num: CmdOP::EtagCompare.to(), },
    Opt { sho: 0u8,  lon: "etag-save",     has: Arg::Yes, num: CmdOP::EtagSave.to(), },
    Opt { sho: 0u8,  lon: "expect100-timeout",has: Arg::Yes, num: CmdOP::Expect100Timeout.to(), },
    Opt { sho: b'f', lon: "fail",          has: Arg::No,  num: CmdOP::Fail.to(), },
    Opt { sho: 0u8,  lon: "fail-early",    has: Arg::No,  num: CmdOP::FailEarly.to(), },
    Opt { sho: 0u8,  lon: "false-start",   has: Arg::No,  num: CmdOP::FalseStart.to(), },
    Opt { sho: b'F', lon: "form",          has: Arg::Yes, num: CmdOP::Form.to(), },
    Opt { sho: 0u8,  lon: "form-string",   has: Arg::Yes, num: CmdOP::FormString.to(), },
    Opt { sho: 0u8,  lon: "ftp-account",   has: Arg::Yes, num: CmdOP::FtpAccount.to(), },
    Opt { sho: 0u8,  lon: "ftp-alternative-to-user",has: Arg::Yes, num: CmdOP::FtpAlternativeToUser.to(), },
    Opt { sho: 0u8,  lon: "ftp-create-dirs",has: Arg::No,  num: CmdOP::FtpCreateDirs.to(), },
    Opt { sho: 0u8,  lon: "ftp-method",    has: Arg::Yes, num: CmdOP::FtpMethod.to(), },
    Opt { sho: 0u8,  lon: "ftp-pasv",      has: Arg::No,  num: CmdOP::FtpPasv.to(), },
    Opt { sho: b'P', lon: "ftp-port",      has: Arg::Yes, num: CmdOP::FtpPort.to(), },
    Opt { sho: 0u8,  lon: "ftp-pret",      has: Arg::No,  num: CmdOP::FtpPret.to(), },
    Opt { sho: 0u8,  lon: "ftp-skip-pasv-ip",has: Arg::No,  num: CmdOP::FtpSkipPasvIp.to(), },
    Opt { sho: 0u8,  lon: "ftp-ssl-ccc",   has: Arg::No,  num: CmdOP::FtpSslCcc.to(), },
    Opt { sho: 0u8,  lon: "ftp-ssl-ccc-mode",has: Arg::Yes, num: CmdOP::FtpSslCccMode.to(), },
    Opt { sho: 0u8,  lon: "ftp-ssl-control",has: Arg::No,  num: CmdOP::FtpSslControl.to(), },
    Opt { sho: b'G', lon: "get",           has: Arg::No,  num: CmdOP::Get.to(), },
    Opt { sho: b'g', lon: "globoff",       has: Arg::No,  num: CmdOP::Globoff.to(), },
    Opt { sho: 0u8,  lon: "happy-eyeballs-timeout-ms",has: Arg::Yes, num: CmdOP::HappyEyeballsTimeoutMs.to(), },
    Opt { sho: 0u8,  lon: "haproxy-protocol",has: Arg::No,  num: CmdOP::HaproxyProtocol.to(), },
    Opt { sho: b'I', lon: "head",          has: Arg::No,  num: CmdOP::Head.to(), },
    Opt { sho: b'h', lon: "header",        has: Arg::Yes, num: CmdOP::Header.to(), },
    Opt { sho: b'H', lon: "help",          has: Arg::No,  num: CmdOP::Help.to(), },
    Opt { sho: 0u8,  lon: "hostpubmd5",    has: Arg::Yes, num: CmdOP::Hostpubmd5.to(), },
    Opt { sho: 0u8,  lon: "http0.9",       has: Arg::No,  num: CmdOP::Http0_9.to(), },
    Opt { sho: b'0', lon: "http1.0",       has: Arg::No,  num: CmdOP::Http1_0.to(), },
    Opt { sho: 0u8,  lon: "http1.1",       has: Arg::No,  num: CmdOP::Http1_1.to(), },
    Opt { sho: 0u8,  lon: "http2",         has: Arg::No,  num: CmdOP::Http2.to(), },
    Opt { sho: 0u8,  lon: "http2-prior-knowledge",has: Arg::No,  num: CmdOP::Http2PriorKnowledge.to(), },
    Opt { sho: 0u8,  lon: "http3",         has: Arg::No,  num: CmdOP::Http3.to(), },
    Opt { sho: 0u8,  lon: "ignore-content-length",has: Arg::No,  num: CmdOP::IgnoreContentLength.to(), },
    Opt { sho: b'i', lon: "include",       has: Arg::No,  num: CmdOP::Include.to(), },
    Opt { sho: b'k', lon: "insecure",      has: Arg::No,  num: CmdOP::Insecure.to(), },
    Opt { sho: 0u8,  lon: "interface",     has: Arg::Yes, num: CmdOP::Interface.to(), },
    Opt { sho: b'4', lon: "ipv4",          has: Arg::No,  num: CmdOP::Ipv4.to(), },
    Opt { sho: b'6', lon: "ipv6",          has: Arg::No,  num: CmdOP::Ipv6.to(), },
    Opt { sho: b'j', lon: "junk-session-cookies",has: Arg::No,  num: CmdOP::JunkSessionCookies.to(), },
    Opt { sho: 0u8,  lon: "keepalive-time",has: Arg::Yes, num: CmdOP::KeepaliveTime.to(), },
    Opt { sho: 0u8,  lon: "key",           has: Arg::Yes, num: CmdOP::Key.to(), },
    Opt { sho: 0u8,  lon: "key-type",      has: Arg::Yes, num: CmdOP::KeyType.to(), },
    Opt { sho: 0u8,  lon: "krb",           has: Arg::Yes, num: CmdOP::Krb.to(), },
    Opt { sho: 0u8,  lon: "libcurl",       has: Arg::Yes, num: CmdOP::Libcurl.to(), },
    Opt { sho: 0u8,  lon: "limit-rate",    has: Arg::Yes, num: CmdOP::LimitRate.to(), },
    Opt { sho: b'l', lon: "list-only",     has: Arg::No,  num: CmdOP::ListOnly.to(), },
    Opt { sho: 0u8,  lon: "local-port",    has: Arg::Yes, num: CmdOP::LocalPort.to(), },
    Opt { sho: b'L', lon: "location",      has: Arg::No,  num: CmdOP::Location.to(), },
    Opt { sho: 0u8,  lon: "location-trusted",has: Arg::No,  num: CmdOP::LocationTrusted.to(), },
    Opt { sho: 0u8,  lon: "login-options", has: Arg::Yes, num: CmdOP::LoginOptions.to(), },
    Opt { sho: 0u8,  lon: "mail-auth",     has: Arg::Yes, num: CmdOP::MailAuth.to(), },
    Opt { sho: 0u8,  lon: "mail-from",     has: Arg::Yes, num: CmdOP::MailFrom.to(), },
    Opt { sho: 0u8,  lon: "mail-rcpt",     has: Arg::Yes, num: CmdOP::MailRcpt.to(), },
    Opt { sho: b'M', lon: "manual",        has: Arg::No,  num: CmdOP::Manual.to(), },
    Opt { sho: 0u8,  lon: "max-filesize",  has: Arg::Yes, num: CmdOP::MaxFilesize.to(), },
    Opt { sho: 0u8,  lon: "max-redirs",    has: Arg::Yes, num: CmdOP::MaxRedirs.to(), },
    Opt { sho: b'm', lon: "max-time",      has: Arg::Yes, num: CmdOP::MaxTime.to(), },
    Opt { sho: 0u8,  lon: "metalink",      has: Arg::No,  num: CmdOP::Metalink.to(), },
    Opt { sho: 0u8,  lon: "negotiate",     has: Arg::No,  num: CmdOP::Negotiate.to(), },
    Opt { sho: b'n', lon: "netrc",         has: Arg::No,  num: CmdOP::Netrc.to(), },
    Opt { sho: 0u8,  lon: "netrc-file",    has: Arg::Yes, num: CmdOP::NetrcFile.to(), },
    Opt { sho: 0u8,  lon: "netrc-optional",has: Arg::No,  num: CmdOP::NetrcOptional.to(), },
    Opt { sho: b':', lon: "next",          has: Arg::No,  num: CmdOP::Next.to(), },
    Opt { sho: 0u8,  lon: "no-alpn",       has: Arg::No,  num: CmdOP::NoAlpn.to(), },
    Opt { sho: b'N', lon: "no-buffer",     has: Arg::No,  num: CmdOP::NoBuffer.to(), },
    Opt { sho: 0u8,  lon: "no-keepalive",  has: Arg::No,  num: CmdOP::NoKeepalive.to(), },
    Opt { sho: 0u8,  lon: "no-npn",        has: Arg::No,  num: CmdOP::NoNpn.to(), },
    Opt { sho: 0u8,  lon: "no-progress-meter",has: Arg::No,  num: CmdOP::NoProgressMeter.to(), },
    Opt { sho: 0u8,  lon: "no-sessionid",  has: Arg::No,  num: CmdOP::NoSessionid.to(), },
    Opt { sho: 0u8,  lon: "noproxy",       has: Arg::Yes, num: CmdOP::Noproxy.to(), },
    Opt { sho: 0u8,  lon: "ntlm",          has: Arg::No,  num: CmdOP::Ntlm.to(), },
    Opt { sho: 0u8,  lon: "ntlm-wb",       has: Arg::No,  num: CmdOP::NtlmWb.to(), },
    Opt { sho: 0u8,  lon: "oauth2-bearer", has: Arg::Yes, num: CmdOP::Oauth2Bearer.to(), },
    Opt { sho: b'o', lon: "output",        has: Arg::Yes, num: CmdOP::Output.to(), },
    Opt { sho: b'Z', lon: "parallel",      has: Arg::No,  num: CmdOP::Parallel.to(), },
    Opt { sho: 0u8,  lon: "parallel-immediate",has: Arg::No,  num: CmdOP::ParallelImmediate.to(), },
    Opt { sho: 0u8,  lon: "parallel-max",  has: Arg::No,  num: CmdOP::ParallelMax.to(), },
    Opt { sho: 0u8,  lon: "pass",          has: Arg::Yes, num: CmdOP::Pass.to(), },
    Opt { sho: 0u8,  lon: "path-as-is",    has: Arg::No,  num: CmdOP::PathAsIs.to(), },
    Opt { sho: 0u8,  lon: "pinnedpubkey",  has: Arg::Yes, num: CmdOP::Pinnedpubkey.to(), },
    Opt { sho: 0u8,  lon: "post301",       has: Arg::No,  num: CmdOP::Post301.to(), },
    Opt { sho: 0u8,  lon: "post302",       has: Arg::No,  num: CmdOP::Post302.to(), },
    Opt { sho: 0u8,  lon: "post303",       has: Arg::No,  num: CmdOP::Post303.to(), },
    Opt { sho: 0u8,  lon: "preproxy",      has: Arg::Yes, num: CmdOP::Preproxy.to(), },
    Opt { sho: b'#', lon: "progress-bar",  has: Arg::No,  num: CmdOP::ProgressBar.to(), },
    Opt { sho: 0u8,  lon: "proto",         has: Arg::Yes, num: CmdOP::Proto.to(), },
    Opt { sho: 0u8,  lon: "proto-default", has: Arg::Yes, num: CmdOP::ProtoDefault.to(), },
    Opt { sho: 0u8,  lon: "proto-redir",   has: Arg::Yes, num: CmdOP::ProtoRedir.to(), },
    Opt { sho: b'x', lon: "proxy",         has: Arg::Yes, num: CmdOP::Proxy.to(), },
    Opt { sho: 0u8,  lon: "proxy-anyauth", has: Arg::No,  num: CmdOP::ProxyAnyauth.to(), },
    Opt { sho: 0u8,  lon: "proxy-basic",   has: Arg::No,  num: CmdOP::ProxyBasic.to(), },
    Opt { sho: 0u8,  lon: "proxy-cacert",  has: Arg::Yes, num: CmdOP::ProxyCacert.to(), },
    Opt { sho: 0u8,  lon: "proxy-capath",  has: Arg::Yes, num: CmdOP::ProxyCapath.to(), },
    Opt { sho: 0u8,  lon: "proxy-cert",    has: Arg::Yes, num: CmdOP::ProxyCert.to(), },
    Opt { sho: 0u8,  lon: "proxy-cert-type",has: Arg::Yes, num: CmdOP::ProxyCertType.to(), },
    Opt { sho: 0u8,  lon: "proxy-ciphers", has: Arg::Yes, num: CmdOP::ProxyCiphers.to(), },
    Opt { sho: 0u8,  lon: "proxy-crlfile", has: Arg::Yes, num: CmdOP::ProxyCrlfile.to(), },
    Opt { sho: 0u8,  lon: "proxy-digest",  has: Arg::No,  num: CmdOP::ProxyDigest.to(), },
    Opt { sho: 0u8,  lon: "proxy-header",  has: Arg::Yes, num: CmdOP::ProxyHeader.to(), },
    Opt { sho: 0u8,  lon: "proxy-insecure",has: Arg::No,  num: CmdOP::ProxyInsecure.to(), },
    Opt { sho: 0u8,  lon: "proxy-key",     has: Arg::Yes, num: CmdOP::ProxyKey.to(), },
    Opt { sho: 0u8,  lon: "proxy-key-type",has: Arg::Yes, num: CmdOP::ProxyKeyType.to(), },
    Opt { sho: 0u8,  lon: "proxy-negotiate",has: Arg::No,  num: CmdOP::ProxyNegotiate.to(), },
    Opt { sho: 0u8,  lon: "proxy-ntlm",    has: Arg::No,  num: CmdOP::ProxyNtlm.to(), },
    Opt { sho: 0u8,  lon: "proxy-pass",    has: Arg::Yes, num: CmdOP::ProxyPass.to(), },
    Opt { sho: 0u8,  lon: "proxy-pinnedpubkey",has: Arg::Yes, num: CmdOP::ProxyPinnedpubkey.to(), },
    Opt { sho: 0u8,  lon: "proxy-service-name",has: Arg::Yes, num: CmdOP::ProxyServiceName.to(), },
    Opt { sho: 0u8,  lon: "proxy-ssl-allow-beast",has: Arg::No,  num: CmdOP::ProxySslAllowBeast.to(), },
    Opt { sho: 0u8,  lon: "proxy-tls13-ciphers",has: Arg::Yes, num: CmdOP::ProxyTls13Ciphers.to(), },
    Opt { sho: 0u8,  lon: "proxy-tlsauthtype",has: Arg::Yes, num: CmdOP::ProxyTlsauthtype.to(), },
    Opt { sho: 0u8,  lon: "proxy-tlspassword",has: Arg::Yes, num: CmdOP::ProxyTlspassword.to(), },
    Opt { sho: 0u8,  lon: "proxy-tlsuser", has: Arg::Yes, num: CmdOP::ProxyTlsuser.to(), },
    Opt { sho: 0u8,  lon: "proxy-tlsv1",   has: Arg::No,  num: CmdOP::ProxyTlsv1.to(), },
    Opt { sho: b'U', lon: "proxy-user",    has: Arg::Yes, num: CmdOP::ProxyUser.to(), },
    Opt { sho: 0u8,  lon: "proxy1.0",      has: Arg::Yes, num: CmdOP::Proxy1_0.to(), },
    Opt { sho: b'p', lon: "proxytunnel",   has: Arg::No,  num: CmdOP::Proxytunnel.to(), },
    Opt { sho: 0u8,  lon: "pubkey",        has: Arg::Yes, num: CmdOP::Pubkey.to(), },
    Opt { sho: b'Q', lon: "quote",         has: Arg::No,  num: CmdOP::Quote.to(), },
    Opt { sho: 0u8,  lon: "random-file",   has: Arg::Yes, num: CmdOP::RandomFile.to(), },
    Opt { sho: b'r', lon: "range",         has: Arg::Yes, num: CmdOP::Range.to(), },
    Opt { sho: 0u8,  lon: "raw",           has: Arg::No,  num: CmdOP::Raw.to(), },
    Opt { sho: b'e', lon: "referer",       has: Arg::Yes, num: CmdOP::Referer.to(), },
    Opt { sho: b'J', lon: "remote-header-name",has: Arg::No,  num: CmdOP::RemoteHeaderName.to(), },
    Opt { sho: b'O', lon: "remote-name",   has: Arg::No,  num: CmdOP::RemoteName.to(), },
    Opt { sho: 0u8,  lon: "remote-name-all",has: Arg::No,  num: CmdOP::RemoteNameAll.to(), },
    Opt { sho: b'R', lon: "remote-time",   has: Arg::No,  num: CmdOP::RemoteTime.to(), },
    Opt { sho: b'X', lon: "request",       has: Arg::Yes, num: CmdOP::Request.to(), },
    Opt { sho: 0u8,  lon: "request-target",has: Arg::No,  num: CmdOP::RequestTarget.to(), },
    Opt { sho: 0u8,  lon: "resolve",       has: Arg::Yes, num: CmdOP::Resolve.to(), },
    Opt { sho: 0u8,  lon: "retry",         has: Arg::Yes, num: CmdOP::Retry.to(), },
    Opt { sho: 0u8,  lon: "retry-connrefused",has: Arg::No,  num: CmdOP::RetryConnrefused.to(), },
    Opt { sho: 0u8,  lon: "retry-delay",   has: Arg::Yes, num: CmdOP::RetryDelay.to(), },
    Opt { sho: 0u8,  lon: "retry-max-time",has: Arg::Yes, num: CmdOP::RetryMaxTime.to(), },
    Opt { sho: 0u8,  lon: "sasl-authzid",  has: Arg::Yes, num: CmdOP::SaslAuthzid.to(), },
    Opt { sho: 0u8,  lon: "sasl-ir",       has: Arg::No,  num: CmdOP::SaslIr.to(), },
    Opt { sho: 0u8,  lon: "service-name",  has: Arg::Yes, num: CmdOP::ServiceName.to(), },
    Opt { sho: b'S', lon: "show-error",    has: Arg::No,  num: CmdOP::ShowError.to(), },
    Opt { sho: b's', lon: "silent",        has: Arg::No,  num: CmdOP::Silent.to(), },
    Opt { sho: 0u8,  lon: "socks4",        has: Arg::Yes, num: CmdOP::Socks4.to(), },
    Opt { sho: 0u8,  lon: "socks4a",       has: Arg::Yes, num: CmdOP::Socks4a.to(), },
    Opt { sho: 0u8,  lon: "socks5",        has: Arg::Yes, num: CmdOP::Socks5.to(), },
    Opt { sho: 0u8,  lon: "socks5-basic",  has: Arg::No,  num: CmdOP::Socks5Basic.to(), },
    Opt { sho: 0u8,  lon: "socks5-gssapi", has: Arg::No,  num: CmdOP::Socks5Gssapi.to(), },
    Opt { sho: 0u8,  lon: "socks5-gssapi-nec",has: Arg::No,  num: CmdOP::Socks5GssapiNec.to(), },
    Opt { sho: 0u8,  lon: "socks5-gssapi-service",has: Arg::Yes, num: CmdOP::Socks5GssapiService.to(), },
    Opt { sho: 0u8,  lon: "socks5-hostname",has: Arg::Yes, num: CmdOP::Socks5Hostname.to(), },
    Opt { sho: b'Y', lon: "speed-limit",   has: Arg::Yes, num: CmdOP::SpeedLimit.to(), },
    Opt { sho: b'y', lon: "speed-time",    has: Arg::Yes, num: CmdOP::SpeedTime.to(), },
    Opt { sho: 0u8,  lon: "ssl",           has: Arg::No,  num: CmdOP::Ssl.to(), },
    Opt { sho: 0u8,  lon: "ssl-allow-beast",has: Arg::No,  num: CmdOP::SslAllowBeast.to(), },
    Opt { sho: 0u8,  lon: "ssl-no-revoke", has: Arg::No,  num: CmdOP::SslNoRevoke.to(), },
    Opt { sho: 0u8,  lon: "ssl-reqd",      has: Arg::No,  num: CmdOP::SslReqd.to(), },
    Opt { sho: b'2', lon: "sslv2",         has: Arg::No,  num: CmdOP::Sslv2.to(), },
    Opt { sho: b'3', lon: "sslv3",         has: Arg::No,  num: CmdOP::Sslv3.to(), },
    Opt { sho: 0u8,  lon: "stderr",        has: Arg::No,  num: CmdOP::Stderr.to(), },
    Opt { sho: 0u8,  lon: "styled-output", has: Arg::No,  num: CmdOP::StyledOutput.to(), },
    Opt { sho: 0u8,  lon: "suppress-connect-headers",has: Arg::No,  num: CmdOP::SuppressConnectHeaders.to(), },
    Opt { sho: 0u8,  lon: "tcp-fastopen",  has: Arg::No,  num: CmdOP::TcpFastopen.to(), },
    Opt { sho: 0u8,  lon: "tcp-nodelay",   has: Arg::No,  num: CmdOP::TcpNodelay.to(), },
    Opt { sho: b't', lon: "telnet-option", has: Arg::Yes, num: CmdOP::TelnetOption.to(), },
    Opt { sho: 0u8,  lon: "tftp-blksize",  has: Arg::Yes, num: CmdOP::TftpBlksize.to(), },
    Opt { sho: 0u8,  lon: "tftp-no-options",has: Arg::No,  num: CmdOP::TftpNoOptions.to(), },
    Opt { sho: b'z', lon: "time-cond",     has: Arg::Yes, num: CmdOP::TimeCond.to(), },
    Opt { sho: 0u8,  lon: "tls-max",       has: Arg::Yes, num: CmdOP::TlsMax.to(), },
    Opt { sho: 0u8,  lon: "tls13-ciphers", has: Arg::Yes, num: CmdOP::Tls13Ciphers.to(), },
    Opt { sho: 0u8,  lon: "tlsauthtype",   has: Arg::Yes, num: CmdOP::Tlsauthtype.to(), },
    Opt { sho: 0u8,  lon: "tlspassword",   has: Arg::No,  num: CmdOP::Tlspassword.to(), },
    Opt { sho: 0u8,  lon: "tlsuser",       has: Arg::Yes, num: CmdOP::Tlsuser.to(), },
    Opt { sho: b'1', lon: "tlsv1",         has: Arg::No,  num: CmdOP::Tlsv1.to(), },
    Opt { sho: 0u8,  lon: "tlsv1.0",       has: Arg::No,  num: CmdOP::Tlsv1_0.to(), },
    Opt { sho: 0u8,  lon: "tlsv1.1",       has: Arg::No,  num: CmdOP::Tlsv1_1.to(), },
    Opt { sho: 0u8,  lon: "tlsv1.2",       has: Arg::No,  num: CmdOP::Tlsv1_2.to(), },
    Opt { sho: 0u8,  lon: "tlsv1.3",       has: Arg::No,  num: CmdOP::Tlsv1_3.to(), },
    Opt { sho: 0u8,  lon: "tr-encoding",   has: Arg::No,  num: CmdOP::TrEncoding.to(), },
    Opt { sho: 0u8,  lon: "trace",         has: Arg::Yes, num: CmdOP::Trace.to(), },
    Opt { sho: 0u8,  lon: "trace-ascii",   has: Arg::Yes, num: CmdOP::TraceAscii.to(), },
    Opt { sho: 0u8,  lon: "trace-time",    has: Arg::No,  num: CmdOP::TraceTime.to(), },
    Opt { sho: 0u8,  lon: "unix-socket",   has: Arg::Yes, num: CmdOP::UnixSocket.to(), },
    Opt { sho: b'T', lon: "upload-file",   has: Arg::Yes, num: CmdOP::UploadFile.to(), },
    Opt { sho: 0u8,  lon: "url",           has: Arg::Yes, num: CmdOP::Url.to(), },
    Opt { sho: b'B', lon: "use-ascii",     has: Arg::No,  num: CmdOP::UseAscii.to(), },
    Opt { sho: b'u', lon: "user",          has: Arg::Yes, num: CmdOP::User.to(), },
    Opt { sho: b'A', lon: "user-agent",    has: Arg::Yes, num: CmdOP::UserAgent.to(), },
    Opt { sho: b'v', lon: "verbose",       has: Arg::No,  num: CmdOP::Verbose.to(), },
    Opt { sho: b'V', lon: "version",       has: Arg::No,  num: CmdOP::Version.to(), },
    Opt { sho: b'w', lon: "write-out",     has: Arg::Yes, num: CmdOP::WriteOut.to(), },
    Opt { sho: 0u8,  lon: "xattr",         has: Arg::No,  num: CmdOP::Xattr.to(), },
];

#[rustfmt::skip]
const OPT_ARY_SHO_IDX: [(u8,usize);59] = [
(b'#',126),(b'0',69),(b'1',210),(b'2',194),(b'3',195),(b'4',78),(b'6',79),(b':',104),(b'A',224),(b'B',222),(b'C',16),(b'D',38),(b'E',7),(b'F',47),(b'G',60),(b'H',66),(b'I',64),(b'J',164),(b'K',13),(b'L',89),(b'M',95),(b'N',106),(b'O',165),(b'P',54),(b'Q',159),(b'R',167),(b'S',178),(b'T',220),(b'U',155),(b'V',226),(b'X',168),(b'Y',188),(b'Z',116),(b'a',3),(b'b',17),(b'c',18),(b'd',22),(b'e',163),(b'f',44),(b'g',61),(b'h',65),(b'i',75),(b'j',80),(b'k',76),(b'l',87),(b'm',98),(b'n',101),(b'o',115),(b'p',157),(b'q',29),(b'r',161),(b's',179),(b't',201),(b'u',223),(b'v',225),(b'w',227),(b'x',130),(b'y',189),(b'z',204),];

#[derive(Debug, Default, PartialEq)]
pub struct CmdOptConf {
    pub opt_program: String,
    //
    pub opt_abstract_unix_socket: String,
    pub opt_alt_svc: String,
    pub flg_anyauth: bool,
    pub flg_append: bool,
    pub flg_basic: bool,
    pub opt_cacert: String,
    pub opt_capath: String,
    pub opt_cert: String,
    pub flg_cert_status: bool,
    pub opt_cert_type: String,
    pub opt_ciphers: String,
    pub flg_compressed: bool,
    pub flg_compressed_ssh: bool,
    pub opt_config: String,
    pub opt_connect_timeout: u32,
    pub opt_connect_to: String,
    pub opt_continue_at: u64,
    pub opt_cookie: String,
    pub opt_cookie_jar: String,
    pub flg_create_dirs: bool,
    pub flg_crlf: bool,
    pub opt_crlfile: String,
    pub opt_data: String,
    pub opt_data_ascii: String,
    pub opt_data_binary: String,
    pub opt_data_raw: String,
    pub opt_data_urlencode: String,
    pub opt_delegation: String,
    pub flg_digest: bool,
    pub flg_disable: bool,
    pub flg_disable_eprt: bool,
    pub flg_disable_epsv: bool,
    pub flg_disallow_username_in_url: bool,
    pub opt_dns_interface: String,
    pub opt_dns_ipv4_addr: String,
    pub opt_dns_ipv6_addr: String,
    pub opt_dns_servers: String,
    pub opt_doh_url: String,
    pub opt_dump_header: String,
    pub opt_egd_file: String,
    pub opt_engine: String,
    pub opt_etag_save: String,
    pub opt_etag_compare: String,
    pub opt_expect100_timeout: u32,
    pub flg_fail: bool,
    pub flg_fail_early: bool,
    pub flg_false_start: bool,
    pub opt_form: String,
    pub opt_form_string: String,
    pub opt_ftp_account: String,
    pub opt_ftp_alternative_to_user: String,
    pub flg_ftp_create_dirs: bool,
    pub opt_ftp_method: String,
    pub flg_ftp_pasv: bool,
    pub opt_ftp_port: String,
    pub flg_ftp_pret: bool,
    pub flg_ftp_skip_pasv_ip: bool,
    pub flg_ftp_ssl_ccc: bool,
    pub opt_ftp_ssl_ccc_mode: String,
    pub flg_ftp_ssl_control: bool,
    pub flg_get: bool,
    pub flg_globoff: bool,
    pub opt_happy_eyeballs_timeout_ms: u64,
    pub flg_haproxy_protocol: bool,
    pub flg_head: bool,
    pub opt_header: String,
    pub opt_hostpubmd5: String,
    pub flg_http0_9: bool,
    pub flg_http1_0: bool,
    pub flg_http1_1: bool,
    pub flg_http2: bool,
    pub flg_http2_prior_knowledge: bool,
    pub flg_http3: bool,
    pub flg_ignore_content_length: bool,
    pub flg_include: bool,
    pub flg_insecure: bool,
    pub opt_interface: String,
    pub flg_ipv4: bool,
    pub flg_ipv6: bool,
    pub flg_junk_session_cookies: bool,
    pub opt_keepalive_time: u32,
    pub opt_key: String,
    pub opt_key_type: String,
    pub opt_krb: String,
    pub opt_libcurl: String,
    pub opt_limit_rate: u64,
    pub flg_list_only: bool,
    pub opt_local_port: String,
    pub flg_location: bool,
    pub flg_location_trusted: bool,
    pub opt_login_options: String,
    pub opt_mail_auth: String,
    pub opt_mail_from: String,
    pub opt_mail_rcpt: String,
    pub flg_manual: bool,
    pub opt_max_filesize: u64,
    pub opt_max_redirs: u32,
    pub opt_max_time: u32,
    pub flg_metalink: bool,
    pub flg_negotiate: bool,
    pub flg_netrc: bool,
    pub opt_netrc_file: String,
    pub flg_netrc_optional: bool,
    pub flg_next: bool,
    pub flg_no_alpn: bool,
    pub flg_no_buffer: bool,
    pub flg_no_keepalive: bool,
    pub flg_no_npn: bool,
    pub flg_no_progress_meter: bool,
    pub flg_no_sessionid: bool,
    pub opt_noproxy: String,
    pub flg_ntlm: bool,
    pub flg_ntlm_wb: bool,
    pub opt_oauth2_bearer: String,
    pub opt_output: String,
    pub flg_parallel: bool,
    pub flg_parallel_immediate: bool,
    pub flg_parallel_max: bool,
    pub opt_pass: String,
    pub flg_path_as_is: bool,
    pub opt_pinnedpubkey: String,
    pub flg_post301: bool,
    pub flg_post302: bool,
    pub flg_post303: bool,
    pub opt_preproxy: String,
    pub flg_progress_bar: bool,
    pub opt_proto: String,
    pub opt_proto_default: String,
    pub opt_proto_redir: String,
    pub opt_proxy: String,
    pub flg_proxy_anyauth: bool,
    pub flg_proxy_basic: bool,
    pub opt_proxy_cacert: String,
    pub opt_proxy_capath: String,
    pub opt_proxy_cert: String,
    pub opt_proxy_cert_type: String,
    pub opt_proxy_ciphers: String,
    pub opt_proxy_crlfile: String,
    pub flg_proxy_digest: bool,
    pub opt_proxy_header: String,
    pub flg_proxy_insecure: bool,
    pub opt_proxy_key: String,
    pub opt_proxy_key_type: String,
    pub flg_proxy_negotiate: bool,
    pub flg_proxy_ntlm: bool,
    pub opt_proxy_pass: String,
    pub opt_proxy_pinnedpubkey: String,
    pub opt_proxy_service_name: String,
    pub flg_proxy_ssl_allow_beast: bool,
    pub opt_proxy_tls13_ciphers: String,
    pub opt_proxy_tlsauthtype: String,
    pub opt_proxy_tlspassword: String,
    pub opt_proxy_tlsuser: String,
    pub flg_proxy_tlsv1: bool,
    pub opt_proxy_user: String,
    pub opt_proxy1_0: String,
    pub flg_proxytunnel: bool,
    pub opt_pubkey: String,
    pub flg_quote: bool,
    pub opt_random_file: String,
    pub opt_range: String,
    pub flg_raw: bool,
    pub opt_referer: String,
    pub flg_remote_header_name: bool,
    pub flg_remote_name: bool,
    pub flg_remote_name_all: bool,
    pub flg_remote_time: bool,
    pub opt_request: String,
    pub flg_request_target: bool,
    pub opt_resolve: String,
    pub opt_retry: u32,
    pub flg_retry_connrefused: bool,
    pub opt_retry_delay: u32,
    pub opt_retry_max_time: u32,
    pub opt_sasl_authzid: String,
    pub flg_sasl_ir: bool,
    pub opt_service_name: String,
    pub flg_show_error: bool,
    pub flg_silent: bool,
    pub opt_socks4: String,
    pub opt_socks4a: String,
    pub opt_socks5: String,
    pub flg_socks5_basic: bool,
    pub flg_socks5_gssapi: bool,
    pub flg_socks5_gssapi_nec: bool,
    pub opt_socks5_gssapi_service: String,
    pub opt_socks5_hostname: String,
    pub opt_speed_limit: u64,
    pub opt_speed_time: u32,
    pub flg_ssl: bool,
    pub flg_ssl_allow_beast: bool,
    pub flg_ssl_no_revoke: bool,
    pub flg_ssl_reqd: bool,
    pub flg_sslv2: bool,
    pub flg_sslv3: bool,
    pub flg_stderr: bool,
    pub flg_styled_output: bool,
    pub flg_suppress_connect_headers: bool,
    pub flg_tcp_fastopen: bool,
    pub flg_tcp_nodelay: bool,
    pub opt_telnet_option: String,
    pub opt_tftp_blksize: u32,
    pub flg_tftp_no_options: bool,
    pub opt_time_cond: String,
    pub opt_tls_max: String,
    pub opt_tls13_ciphers: String,
    pub opt_tlsauthtype: String,
    pub flg_tlspassword: bool,
    pub opt_tlsuser: String,
    pub flg_tlsv1: bool,
    pub flg_tlsv1_0: bool,
    pub flg_tlsv1_1: bool,
    pub flg_tlsv1_2: bool,
    pub flg_tlsv1_3: bool,
    pub flg_tr_encoding: bool,
    pub opt_trace: String,
    pub opt_trace_ascii: String,
    pub flg_trace_time: bool,
    pub opt_unix_socket: String,
    pub opt_upload_file: String,
    pub opt_url: String,
    pub flg_use_ascii: bool,
    pub opt_user: String,
    pub opt_user_agent: String,
    pub flg_verbose: bool,
    pub opt_write_out: String,
    pub flg_xattr: bool,
    pub flg_help: bool,
    pub flg_version: bool,
    //
    pub arg_params: Vec<String>,
}

impl HelpVersion for CmdOptConf {
    fn is_help(&self) -> bool {
        self.flg_help
    }
    fn is_version(&self) -> bool {
        self.flg_version
    }
}
