Current section

Files

Jump to
diint_utilites_common_app src finance_protocol protocol_iso_utilites.erl
Raw

src/finance_protocol/protocol_iso_utilites.erl

%%%-------------------------------------------------------------------
%%% @author cheese
%%% @copyright (C) 2014, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 10. Dec 2014 2:21 PM
%%%-------------------------------------------------------------------
-module(protocol_iso_utilites).
-author("cheese").
-include("../../include/types_finance_protocol.hrl").
%% API
-export([get_field/2, set_field/2, prepare_data_string_to_bcd/1]).
%% Internal Functions
-export([internal_set_field/3]).
-spec(get_field([#iso_field{}], integer()) -> #iso_field{}).
get_field([], _Idx) ->
undefined;
get_field([#iso_field{pos = Idx} = F | _Tail], Idx) ->
F;
get_field([_Head | Tail], Idx) ->
get_field(Tail, Idx).
-spec(set_field([#iso_field{}], #iso_field{}) -> #iso_field{}).
set_field(AllFields, Field) ->
internal_set_field(AllFields, [], Field).
%%======================================================================================================================
internal_set_field([], Res, Field) ->
Res ++ [Field];
internal_set_field([#iso_field{pos = Idx} | Res], Head, #iso_field{pos = Idx} = Field) ->
Head ++ [Field] ++ Res;
internal_set_field([#iso_field{pos = IdxBefore} = FBefore | Tail], Res, #iso_field{pos = Idx} = Field) when IdxBefore > Idx ->
Res ++ [Field] ++ [FBefore] ++ Tail;
internal_set_field([Head | Tail], Res, Field) ->
internal_set_field(Tail, Res ++ [Head], Field).
-spec(prepare_data_string_to_bcd(string()) -> binary()).
prepare_data_string_to_bcd(String) ->
bytes_extension:int_to_bcd(list_to_integer(String)).