THRIFT-2856 refactor erlang basic transports and unify interfaces
Client: Erlang
Patch: Nobuaki Sukegawa

Add read_exact default implementation so that every transport is usable
under framed transport.
diff --git a/lib/erl/src/thrift_transport.erl b/lib/erl/src/thrift_transport.erl
index 0fdf970..31dac86 100644
--- a/lib/erl/src/thrift_transport.erl
+++ b/lib/erl/src/thrift_transport.erl
@@ -101,8 +101,12 @@
 
 read_exact(Transport = #t_transport{module = Module}, Len)
 when is_integer(Len), Len >= 0 ->
-  {NewState, Result} = Module:read_exact(Transport#t_transport.state, Len),
-  {Transport#t_transport{state = NewState}, Result}.
+  case erlang:function_exported(Module, read_exact, 2) of
+      true ->
+        {NewState, Result} = Module:read_exact(Transport#t_transport.state, Len),
+        {Transport#t_transport{state = NewState}, Result};
+      false -> read(Transport, Len)
+  end.
 
 
 write(Transport = #t_transport{module = Module}, Data) ->