2323-include_lib (" rabbit_common/include/rabbit.hrl" ).
2424-include_lib (" kernel/include/logger.hrl" ).
2525
26- -define (DEFAULT_OPTS , []).
27-
28- -spec put_object (term (), binary (), binary (), binary ()) ->
26+ -spec put_object (rabbitmq_aws :connection_handle (), binary (), binary (), iodata ()) ->
2927 ok | {error , term ()}.
3028put_object (Handle , Bucket , Key , Object ) ->
3129 put_object (Handle , Bucket , Key , Object , []).
3230
33- -spec put_object (term (), binary (), binary (), binary (), list ()) ->
31+ -spec put_object (rabbitmq_aws : connection_handle (), binary (), binary (), iodata (), list ()) ->
3432 ok | {error , term ()}.
35- put_object (Handle , Bucket , Key , Object , Opts ) ->
33+ put_object (Handle , Bucket , Key , Object , Opts ) when is_list ( Opts ) ->
3634 Path = object_path (Bucket , Key ),
37- Headers =
35+ { Headers , Opts1 } =
3836 case proplists :get_value (crc32 , Opts , []) of
3937 [] ->
40- [] ;
38+ {[], Opts } ;
4139 Checksum when is_integer (Checksum ) ->
4240 C = base64 :encode_to_string (<<Checksum :32 /unsigned >>),
43- [{" x-amz-checksum-crc32" , C }]
41+ O = proplists :delete (crc32 , Opts ),
42+ {[{" x-amz-checksum-crc32" , C }], O }
4443 end ,
45- case rabbitmq_aws :put (Handle , Path , Object , Headers , [ ? DEFAULT_OPTS | Opts ] ) of
44+ case rabbitmq_aws :put (Handle , Path , Object , Headers , Opts1 ) of
4645 {ok , {_Headers , <<>>}} ->
4746 ok ;
4847 Error ->
4948 {error , Error }
5049 end .
5150
52- -spec get_object (term (), binary (), binary ()) ->
51+ -spec get_object (rabbitmq_aws : connection_handle (), binary (), binary ()) ->
5352 {ok , binary ()} | {error , term ()}.
5453get_object (Handle , Bucket , Key ) ->
5554 get_object (Handle , Bucket , Key , []).
5655
56+ -spec get_object (rabbitmq_aws :connection_handle (), binary (), binary (), list ()) ->
57+ {ok , binary ()} | {error , term ()}.
5758get_object (Handle , Bucket , Key , Opts ) ->
5859 Path = object_path (Bucket , Key ),
59- case rabbitmq_aws :get (Handle , Path , [], [ ? DEFAULT_OPTS | Opts ] ) of
60+ case rabbitmq_aws :get (Handle , Path , [], Opts ) of
6061 {ok , {_Headers , Body }} ->
6162 {ok , Body };
6263 {error , " Not Found" , _ } ->
@@ -65,27 +66,33 @@ get_object(Handle, Bucket, Key, Opts) ->
6566 {error , Error }
6667 end .
6768
68- -spec get_object_attributes (term (), binary (), binary ()) ->
69- {ok , proplists : proplist () } | {error , term ()}.
69+ -spec get_object_attributes (rabbitmq_aws : connection_handle (), binary (), binary ()) ->
70+ {ok , [{ binary (), binary ()}] } | {error , term ()}.
7071get_object_attributes (Handle , Bucket , Key ) ->
7172 get_object_attributes (Handle , Bucket , Key , []).
7273get_object_attributes (Handle , Bucket , Key , Opts ) ->
7374 get_object_attributes (Handle , Bucket , Key , [], Opts ).
7475
75- -spec get_object_attributes (term (), binary (), binary (), [string ()], [term ()]) ->
76- {ok , proplists :proplist ()} | {error , term ()}.
76+ -spec get_object_attributes (
77+ rabbitmq_aws :connection_handle (),
78+ binary (),
79+ binary (),
80+ [binary ()],
81+ [term ()]
82+ ) ->
83+ {ok , [{binary (), binary ()}]} | {error , term ()}.
7784get_object_attributes (Handle , Bucket , Key , Attributes , Opts ) ->
7885 Path = object_path (Bucket , Key ),
79- case rabbitmq_aws :request (Handle , head , Path , <<" " >>, [], [ ? DEFAULT_OPTS | Opts ] ) of
86+ case rabbitmq_aws :request (Handle , head , Path , <<" " >>, [], Opts ) of
8087 {ok , {Headers , _Body }} ->
81- {ok , parse_head_response_headers (Headers , Attributes )};
88+ {ok , filter_attributes (Headers , Attributes )};
8289 {error , " Not Found" , _ } ->
8390 {error , not_found };
8491 Error ->
8592 {error , Error }
8693 end .
8794
88- -spec get_object_with_range (term (), binary (), binary (), range_spec ()) ->
95+ -spec get_object_with_range (rabbitmq_aws : connection_handle (), binary (), binary (), range_spec ()) ->
8996 {ok , binary ()} | {error , term ()}.
9097get_object_with_range (Handle , Bucket , Key , RangeSpec ) ->
9198 get_object_with_range (Handle , Bucket , Key , RangeSpec , []).
@@ -94,7 +101,7 @@ get_object_with_range(Handle, Bucket, Key, RangeSpec0, Opts) ->
94101 Path = object_path (Bucket , Key ),
95102 RangeValue = range_specifier (RangeSpec0 ),
96103 Headers = [{" Range" , lists :flatten ([" bytes=" | RangeValue ])}],
97- case rabbitmq_aws :get (Handle , Path , Headers , [ ? DEFAULT_OPTS | Opts ] ) of
104+ case rabbitmq_aws :get (Handle , Path , Headers , Opts ) of
98105 {ok , {_Headers , Body }} ->
99106 {ok , Body };
100107 {error , " Not Found" , _ } ->
@@ -112,14 +119,21 @@ range_specifier(SuffixLen) when is_integer(SuffixLen) andalso SuffixLen < 0 ->
112119 % % ~b will format the '-' for us.
113120 io_lib :format (" ~b " , [SuffixLen ]).
114121
115- -spec get_object_size (term (), binary (), binary ()) ->
116- integer () | {error , term ()}.
122+ -spec get_object_size (rabbitmq_aws : connection_handle (), binary (), binary ()) ->
123+ { ok , integer ()} | {error , term ()}.
117124get_object_size (Handle , Bucket , Key ) ->
118125 get_object_size (Handle , Bucket , Key , []).
119126
127+ -spec get_object_size (rabbitmq_aws :connection_handle (), binary (), binary (), [term ()]) ->
128+ {ok , integer ()} | {error , term ()}.
120129get_object_size (Handle , Bucket , Key , Opts ) ->
121- {ok , [{_ , Size }]} = get_object_attributes (Handle , Bucket , Key , [<<" content-length" >>], Opts ),
122- binary_to_integer (Size ).
130+ case get_object_attributes (Handle , Bucket , Key , [<<" content-length" >>], Opts ) of
131+ {ok , Attributes } ->
132+ [{<<" content-length" >>, Size }] = Attributes ,
133+ {ok , binary_to_integer (Size )};
134+ Error ->
135+ Error
136+ end .
123137
124138object_path (Bucket , Key ) ->
125139 BucketStr = ensure_string (Bucket ),
@@ -131,9 +145,8 @@ ensure_string(Binary) when is_binary(Binary) ->
131145ensure_string (List ) when is_list (List ) ->
132146 List .
133147
134- parse_head_response_headers (Headers , Attributes ) ->
135- filter_attributes (Headers , Attributes ).
136-
148+ -spec filter_attributes ([{binary (), binary ()}], [binary ()]) ->
149+ [{binary (), binary ()}].
137150filter_attributes (Headers , []) ->
138151 Headers ;
139152filter_attributes (Headers , Attributes ) ->
0 commit comments