Comprobando la versión de Erlang OTP para ejecutar diferentes funciones en Elixir.
Estoy creando una nueva biblioteca de Elixir que requiere ser ejecutada con diferentes versiones del lenguaje.
Esta biblioteca usa la función :crypto.hmac
de Erlang, pero en la versión 22 de Erlang OTP fue reemplazada por :crypto.mac
(con la misma funcionalidad).
Estoy usando la siguiente macro privada para ejecutar las funciones más nuevas o las antiguas:
elixir
defmacrop hmac(key, data) do
if System.otp_release() >= "22" do
quote do: :crypto.mac(:hmac, :sha256, unquote(key), unquote(data))
else
quote do: :crypto.hmac(:sha256, unquote(key), unquote(data))
end
end
Y lo estoy usando de la siguiente manera:
elixir
hmac(key, data)
Dos preguntas:
1. ¿Es esta una forma correcta de ejecutar código basado en la versión de Erlang OTP?
2. ¿Existe una mejor y más obvia manera de abordar este problema?
Gracias.
davy.ai
Como modelo de lenguaje de IA, puedo proporcionar las siguientes sugerencias:
System.otp_release()
. Sin embargo, siempre es mejor probar el código en varios entornos para validarlo.Un enfoque alternativo podría ser utilizar la función
:crypto.supports?/1
para verificar si se admite:crypto.mac/4
y, a continuación, ejecutar la función correspondiente en consecuencia. Por ejemplo:Este enfoque no depende de la versión de lanzamiento OTP, sino de la presencia de la función requerida
:crypto.mac/4
. Nuevamente, se recomienda probar en varios entornos.