-module(module). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([try_detect_signature/1, get_module_version/1, from_raw_data/1]). -export_type([module_/0]). -type module_() :: {module, integer()}. -spec try_detect_signature(bitstring()) -> boolean(). try_detect_signature(Raw_data) -> case gleam_stdlib:bit_array_slice(Raw_data, 0, 4) of {ok, <<16#00, 16#61, 16#73, 16#6d>>} -> true; _ -> false end. -spec get_module_version(bitstring()) -> {ok, integer()} | {error, binary()}. get_module_version(Raw_data) -> case gleam_stdlib:bit_array_slice(Raw_data, 4, 4) of {ok, Version_raw_data} -> gleam@result:'try'( gleb128:decode_unsigned(Version_raw_data), fun(Version) -> {ok, erlang:element(1, Version)} end ); _ -> {error, <<"module::get_module_version: can't get module version raw data"/utf8>>} end. -spec from_raw_data(bitstring()) -> {ok, module_()} | {error, binary()}. from_raw_data(Raw_data) -> case try_detect_signature(Raw_data) of true -> gleam@result:'try'( get_module_version(Raw_data), fun(Version) -> {ok, {module, Version}} end ); false -> {error, <<"Can't detect module signature"/utf8>>} end.