From: David Reiss Date: Mon, 30 Aug 2010 22:05:20 +0000 (+0000) Subject: erlang: Add some initial specs for thrift_transport and its implementations X-Git-Tag: 0.5.0~132 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=9b7fbe37437a21a9d18644d9b20b6e8e86a92ce4;p=common%2Fthrift.git erlang: Add some initial specs for thrift_transport and its implementations git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@990973 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/lib/erl/include/thrift_transport_impl.hrl b/lib/erl/include/thrift_transport_impl.hrl new file mode 100644 index 00000000..bbf1b891 --- /dev/null +++ b/lib/erl/include/thrift_transport_impl.hrl @@ -0,0 +1,31 @@ +%% +%% Licensed to the Apache Software Foundation (ASF) under one +%% or more contributor license agreements. See the NOTICE file +%% distributed with this work for additional information +%% regarding copyright ownership. The ASF licenses this file +%% to you under the Apache License, Version 2.0 (the +%% "License"); you may not use this file except in compliance +%% with the License. You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, +%% software distributed under the License is distributed on an +%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +%% KIND, either express or implied. See the License for the +%% specific language governing permissions and limitations +%% under the License. +%% + +%% Signature specifications for transport implementations. + +-ifndef(THRIFT_TRANSPORT_IMPL_INCLUDED). +-define(THRIFT_TRANSPORT_IMPL_INCLUDED, true). + +-spec write(state(), iolist() | binary()) -> ok | {error, _Reason}. +-spec read(state(), non_neg_integer()) -> {ok, binary()} | {error, _Reason}. +-spec flush(state()) -> ok | {error, _Reason}. +-spec close(state()) -> ok | {error, _Reason}. + + +-endif. diff --git a/lib/erl/src/thrift_base64_transport.erl b/lib/erl/src/thrift_base64_transport.erl index 9d13151c..76303331 100644 --- a/lib/erl/src/thrift_base64_transport.erl +++ b/lib/erl/src/thrift_base64_transport.erl @@ -29,6 +29,8 @@ %% State -record(b64_transport, {wrapped}). +-type state() :: #b64_transport{}. +-include("thrift_transport_impl.hrl"). new(Wrapped) -> State = #b64_transport{wrapped = Wrapped}, diff --git a/lib/erl/src/thrift_buffered_transport.erl b/lib/erl/src/thrift_buffered_transport.erl index ad67510b..c6df73a3 100644 --- a/lib/erl/src/thrift_buffered_transport.erl +++ b/lib/erl/src/thrift_buffered_transport.erl @@ -35,6 +35,9 @@ -record(buffered_transport, {wrapped, % a thrift_transport write_buffer % iolist() }). +-type state() :: pid(). +-include("thrift_transport_impl.hrl"). + %%==================================================================== %% API diff --git a/lib/erl/src/thrift_disk_log_transport.erl b/lib/erl/src/thrift_disk_log_transport.erl index 72f84f2a..2645c67d 100644 --- a/lib/erl/src/thrift_disk_log_transport.erl +++ b/lib/erl/src/thrift_disk_log_transport.erl @@ -35,6 +35,8 @@ close_on_close = false, sync_every = infinity, sync_tref}). +-type state() :: #dl_transport{}. +-include("thrift_transport_impl.hrl"). %% Create a transport attached to an already open log. diff --git a/lib/erl/src/thrift_file_transport.erl b/lib/erl/src/thrift_file_transport.erl index 5ac2dbe1..7ee1c127 100644 --- a/lib/erl/src/thrift_file_transport.erl +++ b/lib/erl/src/thrift_file_transport.erl @@ -29,6 +29,8 @@ -record(t_file_transport, {device, should_close = true, mode = write}). +-type state() :: #t_file_transport{}. +-include("thrift_transport_impl.hrl"). %%%% CONSTRUCTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/lib/erl/src/thrift_framed_transport.erl b/lib/erl/src/thrift_framed_transport.erl index 9a29ecd0..92bd5885 100644 --- a/lib/erl/src/thrift_framed_transport.erl +++ b/lib/erl/src/thrift_framed_transport.erl @@ -36,6 +36,8 @@ read_buffer, % iolist() write_buffer % iolist() }). +-type state() :: pid(). +-include("thrift_transport_impl.hrl"). %%==================================================================== %% API diff --git a/lib/erl/src/thrift_http_transport.erl b/lib/erl/src/thrift_http_transport.erl index f8c18277..f0a45fe7 100644 --- a/lib/erl/src/thrift_http_transport.erl +++ b/lib/erl/src/thrift_http_transport.erl @@ -43,6 +43,8 @@ http_options, % see http(3) extra_headers % [{str(), str()}, ...] }). +-type state() :: pid(). +-include("thrift_transport_impl.hrl"). %%==================================================================== %% API diff --git a/lib/erl/src/thrift_memory_buffer.erl b/lib/erl/src/thrift_memory_buffer.erl index b4f607a9..34a36689 100644 --- a/lib/erl/src/thrift_memory_buffer.erl +++ b/lib/erl/src/thrift_memory_buffer.erl @@ -33,6 +33,8 @@ -export([write/2, read/2, flush/1, close/1]). -record(memory_buffer, {buffer}). +-type state() :: #memory_buffer{}. +-include("thrift_transport_impl.hrl"). %%==================================================================== %% API diff --git a/lib/erl/src/thrift_socket_transport.erl b/lib/erl/src/thrift_socket_transport.erl index fcd69449..1a8ba817 100644 --- a/lib/erl/src/thrift_socket_transport.erl +++ b/lib/erl/src/thrift_socket_transport.erl @@ -29,6 +29,8 @@ -record(data, {socket, recv_timeout=infinity}). +-type state() :: #data{}. +-include("thrift_transport_impl.hrl"). new(Socket) -> new(Socket, []). diff --git a/lib/erl/src/thrift_transport.erl b/lib/erl/src/thrift_transport.erl index 20c4b5dc..420281c7 100644 --- a/lib/erl/src/thrift_transport.erl +++ b/lib/erl/src/thrift_transport.erl @@ -41,17 +41,20 @@ new(Module, Data) when is_atom(Module) -> {ok, #transport{module = Module, data = Data}}. -%% Data :: iolist() +-spec write(#transport{}, iolist() | binary()) -> ok | {error, _Reason}. write(Transport, Data) -> Module = Transport#transport.module, Module:write(Transport#transport.data, Data). +-spec read(#transport{}, non_neg_integer()) -> {ok, binary()} | {error, _Reason}. read(Transport, Len) when is_integer(Len) -> Module = Transport#transport.module, Module:read(Transport#transport.data, Len). +-spec flush(#transport{}) -> ok | {error, _Reason}. flush(#transport{module = Module, data = Data}) -> Module:flush(Data). +-spec close(#transport{}) -> ok | {error, _Reason}. close(#transport{module = Module, data = Data}) -> Module:close(Data).