Packages
ex_aws
0.4.6
2.7.0
2.6.1
2.6.0
2.5.11
2.5.10
2.5.9
2.5.8
2.5.7
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.9
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.1
1.0.0-beta3
1.0.0-beta2
1.0.0-beta1
1.0.0-beta0
0.5.0
0.4.19
0.4.18
0.4.17
0.4.15
0.4.14
0.4.13
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.1
0.3.0
0.2.0
0.1.2
0.1.1
0.1.0
0.0.5
0.0.4
0.0.3
AWS client for Elixir. Currently supports Dynamo, DynamoStreams, EC2, Firehose, Kinesis, KMS, Lambda, RRDS, Route53, S3, SES, SNS, SQS, STS and others.
Current section
Files
Jump to
Current section
Files
lib/ex_aws/utils.ex
defmodule ExAws.Utils do
@moduledoc false
def camelize_keys(opts) do
camelize_keys(opts, deep: false)
end
# This isn't tail recursive. However, given that the structures
# being worked upon are relatively shallow, this is ok.
def camelize_keys(opts = %{}, deep: deep) do
opts |> Enum.reduce(%{}, fn({k ,v}, map) ->
if deep do
Map.put(map, camelize_key(k), camelize_keys(v, deep: true))
else
Map.put(map, camelize_key(k), v)
end
end)
end
def camelize_keys([%{} | _] = opts, deep: deep) do
Enum.map(opts, &camelize_keys(&1, deep: deep))
end
def camelize_keys(opts, depth) do
try do
opts
|> Enum.into(%{})
|> camelize_keys(depth)
rescue
[Protocol.UndefinedError, ArgumentError] -> opts
end
end
defp camelize_key(key) when is_atom(key) do
key
|> Atom.to_string
|> Mix.Utils.camelize
end
defp camelize_key(key) when is_binary(key) do
key |> Mix.Utils.camelize
end
def upcase(value) when is_atom(value) do
value
|> Atom.to_string
|> String.upcase
end
def upcase(value) when is_binary(value) do
String.upcase(value)
end
@seconds_0_to_1970 :calendar.datetime_to_gregorian_seconds({{1970, 1, 1}, {0, 0, 0}})
def iso_z_to_secs(<<date::binary-10, "T", time::binary-8, "Z">>) do
<<year::binary-4, "-", mon::binary-2, "-", day::binary-2>> = date
<<hour::binary-2, ":", min::binary-2, ":", sec::binary-2>> = time
year = year |> String.to_integer
mon = mon |> String.to_integer
day = day |> String.to_integer
hour = hour |> String.to_integer
min = min |> String.to_integer
sec = sec |> String.to_integer
# Seriously? Gregorian seconds but not epoch seconds?
greg_secs = :calendar.datetime_to_gregorian_seconds({{year, mon, day}, {hour, min, sec}})
greg_secs - @seconds_0_to_1970
end
def now_in_seconds do
greg_secs = :os.timestamp
|> :calendar.now_to_universal_time
|> :calendar.datetime_to_gregorian_seconds
greg_secs - @seconds_0_to_1970
end
end