THRIFT-5635 Update erlang client for Erlang 23-25
Client: erl
Patch: Sergey Yelin

This closes #2677

Summary of changes:
 - Add useful compiler options
 - Format sources using erlfmt
 - Switch to modern callbacks in thrift_* modules
 - Add static analysis (dialyzer), disabled by default
 - Add/fix types for API calls

NOTE: Enabling static analysis requires additional tweaks in multiplexer module.
diff --git a/lib/erl/test/test_disklog.erl b/lib/erl/test/test_disklog.erl
index dcb6fc1..742e895 100644
--- a/lib/erl/test/test_disklog.erl
+++ b/lib/erl/test/test_disklog.erl
@@ -23,77 +23,83 @@
 -include_lib("eunit/include/eunit.hrl").
 
 disklog_test() ->
-  {ok, TransportFactory} =
-    thrift_disk_log_transport:new_transport_factory(
-      test_disklog,
-      [{file, "./test_log"},
-       {size, {1024*1024, 10}}]),
-  {ok, ProtocolFactory} =
-    thrift_binary_protocol:new_protocol_factory( TransportFactory, []),
-  {ok, Proto} = ProtocolFactory(),
-  {ok, Client0} = thrift_client:new(Proto, thrift_test_thrift),
+    {ok, TransportFactory} =
+        thrift_disk_log_transport:new_transport_factory(
+            test_disklog,
+            [
+                {file, "./test_log"},
+                {size, {1024 * 1024, 10}}
+            ]
+        ),
+    {ok, ProtocolFactory} =
+        thrift_binary_protocol:new_protocol_factory(TransportFactory, []),
+    {ok, Proto} = ProtocolFactory(),
+    {ok, Client0} = thrift_client:new(Proto, thrift_test_thrift),
 
-  io:format("Client started~n"),
+    io:format("Client started~n"),
 
-  % We have to make oneway calls into this client only since otherwise it
-  % will try to read from the disklog and go boom.
-  {Client1, {ok, ok}} = thrift_client:call(Client0, testOneway, [16#deadbeef]),
-  io:format("Call written~n"),
+    % We have to make oneway calls into this client only since otherwise it
+    % will try to read from the disklog and go boom.
+    {Client1, {ok, ok}} = thrift_client:call(Client0, testOneway, [16#deadbeef]),
+    io:format("Call written~n"),
 
-  % Use the send_call method to write a non-oneway call into the log
-  {Client2, ok} =
-    thrift_client:send_call(Client1, testString, [<<"hello world">>]),
-  io:format("Non-oneway call sent~n"),
+    % Use the send_call method to write a non-oneway call into the log
+    {Client2, ok} =
+        thrift_client:send_call(Client1, testString, [<<"hello world">>]),
+    io:format("Non-oneway call sent~n"),
 
-  {_Client3, ok} = thrift_client:close(Client2),
-  io:format("Client closed~n"),
-  
-  lists:foreach(fun(File) -> file:delete(File) end, [
-    "./test_log.1",
-    "./test_log.idx",
-    "./test_log.siz"
-  ]),
-  io:format("Cleaning up test files~n"),
+    {_Client3, ok} = thrift_client:close(Client2),
+    io:format("Client closed~n"),
 
-  ok.
+    lists:foreach(fun(File) -> file:delete(File) end, [
+        "./test_log.1",
+        "./test_log.idx",
+        "./test_log.siz"
+    ]),
+    io:format("Cleaning up test files~n"),
+
+    ok.
 
 disklog_base64_test() ->
-  {ok, TransportFactory} =
-    thrift_disk_log_transport:new_transport_factory(
-      test_disklog,
-      [{file, "./test_b64_log"},
-       {size, {1024*1024, 10}}]),
-  {ok, B64Factory} =
-    thrift_base64_transport:new_transport_factory(TransportFactory),
-  {ok, BufFactory} =
-    thrift_buffered_transport:new_transport_factory(B64Factory),
-  {ok, ProtocolFactory} =
-    thrift_binary_protocol:new_protocol_factory(BufFactory, []),
-  {ok, Proto} = ProtocolFactory(),
-  {ok, Client0} = thrift_client:new(Proto, thrift_test_thrift),
+    {ok, TransportFactory} =
+        thrift_disk_log_transport:new_transport_factory(
+            test_disklog,
+            [
+                {file, "./test_b64_log"},
+                {size, {1024 * 1024, 10}}
+            ]
+        ),
+    {ok, B64Factory} =
+        thrift_base64_transport:new_transport_factory(TransportFactory),
+    {ok, BufFactory} =
+        thrift_buffered_transport:new_transport_factory(B64Factory),
+    {ok, ProtocolFactory} =
+        thrift_binary_protocol:new_protocol_factory(BufFactory, []),
+    {ok, Proto} = ProtocolFactory(),
+    {ok, Client0} = thrift_client:new(Proto, thrift_test_thrift),
 
-  io:format("Client started~n"),
+    io:format("Client started~n"),
 
-  % We have to make oneway calls into this client only since otherwise
-  % it will try to read from the disklog and go boom.
-  {Client1, {ok, ok}} = thrift_client:call(Client0, testOneway, [16#deadbeef]),
-  io:format("Call written~n"),
+    % We have to make oneway calls into this client only since otherwise
+    % it will try to read from the disklog and go boom.
+    {Client1, {ok, ok}} = thrift_client:call(Client0, testOneway, [16#deadbeef]),
+    io:format("Call written~n"),
 
-  % Use the send_call method to write a non-oneway call into the log
-  {Client2, ok} =
-    thrift_client:send_call(Client1, testString, [<<"hello world">>]),
-  io:format("Non-oneway call sent~n"),
+    % Use the send_call method to write a non-oneway call into the log
+    {Client2, ok} =
+        thrift_client:send_call(Client1, testString, [<<"hello world">>]),
+    io:format("Non-oneway call sent~n"),
 
-  {_Client3, ok} = thrift_client:close(Client2),
-  io:format("Client closed~n"),
+    {_Client3, ok} = thrift_client:close(Client2),
+    io:format("Client closed~n"),
 
-  lists:foreach(fun(File) -> file:delete(File) end, [
-    "./test_b64_log.1",
-    "./test_b64_log.idx",
-    "./test_b64_log.siz"
-  ]),
-  io:format("Cleaning up test files~n"),
+    lists:foreach(fun(File) -> file:delete(File) end, [
+        "./test_b64_log.1",
+        "./test_b64_log.idx",
+        "./test_b64_log.siz"
+    ]),
+    io:format("Cleaning up test files~n"),
 
-  ok.
+    ok.
 
 -endif.