%rust_arches x86_64 %{ix86} armv7hl aarch64 ppc64 ppc64le riscv64 s390x
%version_no_tilde() %{lua:
    local sep = rpm.expand('%1')
    local ver = rpm.expand('%2')
\
    if sep == '%1' then
        sep = '-'
    end
\
    if ver == '%2' then
        ver = rpm.expand('%version')
    end
    ver = ver:gsub('~', sep)
\
    print(ver)
}
%__crates_url https://crates.io/api/v1/crates/
%crates_source() %{lua:
    local crate = rpm.expand('%1')
    local version = rpm.expand('%2')
    local url = rpm.expand('%__crates_url')
\
    if crate == '%1' then
        crate = rpm.expand('%real_crate')
    end
    if crate == '%real_crate' then
        crate = rpm.expand('%crate')
    end
    if crate == '%crate' then
        crate = rpm.expand('%name')
    end
\
    if version == '%2' then
        version = rpm.expand('%version')
    end
    version = version:gsub('~', '-')
\
    print(url .. crate .. '/' .. version .. '/download#/' .. crate .. '-' .. version .. '.crate')
}

# If crate not in _build_crates and _module_build is set, we should skip the build
%__cargo_skip_build %{lua:
local crate = rpm.expand('%{crate}')
local build_crate = false
for w in rpm.expand('%{?_build_crates}'):gmatch('%S+') do
  if w == crate then
    build_crate = true
    break
  end
end
if (rpm.expand('%{defined _module_build}') ~= '0' and not build_crate) then
  print(1)
else
  print(0)
end}
