defmodule Spear.Records.Google do
@moduledoc """
A record-like wrapper around google protobufs
"""
defmacro empty do
quote do
{:"google.protobuf.Empty"}
end
end
# message Timestamp {
# // Represents seconds of UTC time since Unix epoch
# // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
# // 9999-12-31T23:59:59Z inclusive.
# int64 seconds = 1;
#
# // Non-negative fractions of a second at nanosecond resolution. Negative
# // second values with fractions must still have non-negative nanos values
# // that count forward in time. Must be from 0 to 999,999,999
# // inclusive.
# int32 nanos = 2;
# }
if Version.match?(System.version(), ">= 1.11.0") do
def timestamp(%DateTime{} = datetime) do
# google timestamp is number of seconds from the first second of 1970 (smeared)
update_in(datetime.year, &(&1 - 1970))
|> DateTime.to_gregorian_seconds()
|> timestamp()
end
end
def timestamp({seconds, nanos}) do
{:"google.protobuf.Timestamp", seconds, nanos}
end
# message Duration {
# // Signed seconds of the span of time. Must be from -315,576,000,000
# // to +315,576,000,000 inclusive. Note: these bounds are computed from:
# // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
# int64 seconds = 1;
#
# // Signed fractions of a second at nanosecond resolution of the span
# // of time. Durations less than one second are represented with a 0
# // `seconds` field and a positive or negative `nanos` field. For durations
# // of one second or more, a non-zero value for the `nanos` field must be
# // of the same sign as the `seconds` field. Must be from -999,999,999
# // to +999,999,999 inclusive.
# int32 nanos = 2;
# }
def duration(seconds, nanos) do
{:"google.protobuf.Duration", seconds, nanos}
end
end