diff --git a/lib/futu/component/api.ex b/lib/futu/component/api.ex index 7bf8b59..4ae8a34 100644 --- a/lib/futu/component/api.ex +++ b/lib/futu/component/api.ex @@ -16,8 +16,6 @@ defmodule Futu.Component.Api do @before_compile unquote(__MODULE__) - @mapper_module Application.compile_env(:futu, :mapper_module, nil) - @spec map_c2s(any()) :: list() def map_c2s(opts \\ []) def map_c2s(opts), do: opts @@ -25,15 +23,6 @@ defmodule Futu.Component.Api do @spec map_s2c(any()) :: any() def map_s2c(opts), do: opts - defp post_process_s2c(s2c, opts) do - mapped_s2c = map_s2c(s2c) - - case @mapper_module do - nil -> mapped_s2c - _ -> apply(@mapper_module, :map, [mapped_s2c, opts]) - end - end - defoverridable map_c2s: 1, map_s2c: 1 end @@ -81,7 +70,7 @@ defmodule Futu.Component.Api do case response do %{retType: 0, s2c: s2c} -> - {:ok, post_process_s2c(s2c, opts)} + {:ok, map_s2c(s2c)} %{retType: _ret_type, retMsg: ret_msg, errCode: _err_code} -> {:error, ret_msg} diff --git a/lib/futu/component/mapper/close_only.ex b/lib/futu/component/mapper/close_only.ex deleted file mode 100644 index ed25e9f..0000000 --- a/lib/futu/component/mapper/close_only.ex +++ /dev/null @@ -1,19 +0,0 @@ -defmodule Futu.Component.Mapper.CloseOnly do - @moduledoc false - @behaviour Futu.Component.Mapper - - def map(data, opts) when is_list(data) do - Enum.map(data, fn item -> - map(item, opts) - end) - end - - def map(data = %Qot_Common.KLine{}, opts) do - %{ - code: opts[:code], - close: data.highPrice - } - end - - def map(data, _opts), do: data -end diff --git a/lib/futu/component/mapper/mapper.ex b/lib/futu/component/mapper/mapper.ex deleted file mode 100644 index bd2804f..0000000 --- a/lib/futu/component/mapper/mapper.ex +++ /dev/null @@ -1,5 +0,0 @@ -defmodule Futu.Component.Mapper do - @moduledoc false - - @callback map(any(), list()) :: any() -end diff --git a/lib/futu/component/mapper/nothing.ex b/lib/futu/component/mapper/nothing.ex deleted file mode 100644 index 5d5a0d2..0000000 --- a/lib/futu/component/mapper/nothing.ex +++ /dev/null @@ -1,7 +0,0 @@ -defmodule Futu.Component.Mapper.Nothing do - @moduledoc false - @behaviour Futu.Component.Mapper - - @spec map(any(), list()) :: any() - def map(data, _opts), do: data -end diff --git a/lib/futu/gen_server/serial_number.ex b/lib/futu/gen_server/serial_number.ex new file mode 100644 index 0000000..0fbf4fb --- /dev/null +++ b/lib/futu/gen_server/serial_number.ex @@ -0,0 +1,26 @@ +defmodule Futu.GenServer.SerialNumber do + @moduledoc """ + Generate incremental numbers + """ + use GenServer + + @spec start_link(list()) :: {:ok, pid()} + def start_link(_opts) do + GenServer.start_link(__MODULE__, nil) + end + + @spec init(nil) :: {:ok, map()} + def init(nil) do + {:ok, %{sn: os_time()}} + end + + def handle_call(:generate, _from, %{sn: sn} = state) do + {:reply, sn + 1, %{state | sn: sn + 1}} + end + + def handle_call(:get_current_state, _from, %{sn: sn} = state) do + {:reply, sn, state} + end + + defp os_time(), do: :os.system_time(:millisecond) +end diff --git a/test/futu/genserver/serial_number_test.ex b/test/futu/genserver/serial_number_test.ex new file mode 100644 index 0000000..e184468 --- /dev/null +++ b/test/futu/genserver/serial_number_test.ex @@ -0,0 +1,20 @@ +defmodule Futu.GenServer.SerialNumberTest do + use ExUnit.Case + alias Futu.GenServer.SerialNumber + + setup_all do + {:ok, pid} = SerialNumber.start_link([]) + {:ok, pid: pid} + end + + describe "generate" do + test "increments", %{pid: pid} do + sn_1 = GenServer.call(pid, :generate) + sn_2 = GenServer.call(pid, :generate) + sn_3 = GenServer.call(pid, :generate) + + assert sn_3 > sn_2 + assert sn_2 > sn_1 + end + end +end