blob: 20d0fef7d55f200799ffe46c54b30c6501f77040 [file] [log] [blame]
#include "tlbmc/time/time.h"
#include <sys/types.h>
#include <cstdint>
#include "google/protobuf/duration.pb.h"
#include "google/protobuf/timestamp.pb.h"
#include "absl/time/time.h"
namespace milotic_tlbmc {
google::protobuf::Timestamp Now(absl::Time time) {
google::protobuf::Timestamp timestamp;
const int64_t seconds = absl::ToUnixSeconds(time); // NOLINT
timestamp.set_seconds(seconds);
timestamp.set_nanos(static_cast<int32_t>(
(time - absl::FromUnixSeconds(seconds)) / absl::Nanoseconds(1)));
return timestamp;
}
google::protobuf::Timestamp MilliSecondsToTimestamp(uint64_t milliseconds) {
google::protobuf::Timestamp timestamp;
// int64_t has max value of 9223372036854775807, it should be enough for
// milliseconds till April 2262.
timestamp.set_seconds(static_cast<int64_t>(milliseconds) / 1000);
timestamp.set_nanos(static_cast<int32_t>((milliseconds % 1000) * 1000000));
return timestamp;
}
google::protobuf::Duration EncodeGoogleApiProto(absl::Duration d) {
google::protobuf::Duration proto;
const int64_t s = absl::IDivDuration(d, absl::Seconds(1), &d);
const int64_t n = absl::IDivDuration(d, absl::Nanoseconds(1), &d);
proto.set_seconds(s);
proto.set_nanos(static_cast<int32_t>(n));
return proto;
}
absl::Time DecodeGoogleApiProto(const google::protobuf::Timestamp& timestamp) {
return absl::FromUnixSeconds(timestamp.seconds()) +
absl::Nanoseconds(timestamp.nanos());
}
absl::Duration DecodeGoogleApiProto(
const google::protobuf::Duration& duration) {
return absl::Seconds(duration.seconds()) +
absl::Nanoseconds(duration.nanos());
}
} // namespace milotic_tlbmc