# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: google/type/money.proto, google/type/date.proto, google/type/timeofday.proto
# plugin: python-betterproto
from dataclasses import dataclass

import betterproto


@dataclass
class Money(betterproto.Message):
    """Represents an amount of money with its currency type."""

    # The 3-letter currency code defined in ISO 4217.
    currency_code: str = betterproto.string_field(1)
    # The whole units of the amount. For example if `currencyCode` is `"USD"`,
    # then 1 unit is one US dollar.
    units: int = betterproto.int64_field(2)
    # Number of nano (10^-9) units of the amount. The value must be between
    # -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos`
    # must be positive or zero. If `units` is zero, `nanos` can be positive,
    # zero, or negative. If `units` is negative, `nanos` must be negative or
    # zero. For example $-1.75 is represented as `units`=-1 and
    # `nanos`=-750,000,000.
    nanos: int = betterproto.int32_field(3)


@dataclass
class Date(betterproto.Message):
    """
    Represents a whole or partial calendar date, e.g. a birthday. The time of
    day and time zone are either specified elsewhere or are not significant.
    The date is relative to the Proleptic Gregorian Calendar. This can
    represent: * A full date, with non-zero year, month and day values * A
    month and day value, with a zero year, e.g. an anniversary * A year on its
    own, with zero month and day values * A year and month value, with a zero
    day, e.g. a credit card expiration date Related types are
    [google.type.TimeOfDay][google.type.TimeOfDay] and
    `google.protobuf.Timestamp`.
    """

    # Year of date. Must be from 1 to 9999, or 0 if specifying a date without a
    # year.
    year: int = betterproto.int32_field(1)
    # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
    # month and day.
    month: int = betterproto.int32_field(2)
    # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
    # if specifying a year by itself or a year and month where the day is not
    # significant.
    day: int = betterproto.int32_field(3)


@dataclass
class TimeOfDay(betterproto.Message):
    """
    Represents a time of day. The date and time zone are either not significant
    or are specified elsewhere. An API may choose to allow leap seconds.
    Related types are [google.type.Date][google.type.Date] and
    `google.protobuf.Timestamp`.
    """

    # Hours of day in 24 hour format. Should be from 0 to 23. An API may choose
    # to allow the value "24:00:00" for scenarios like business closing time.
    hours: int = betterproto.int32_field(1)
    # Minutes of hour of day. Must be from 0 to 59.
    minutes: int = betterproto.int32_field(2)
    # Seconds of minutes of the time. Must normally be from 0 to 59. An API may
    # allow the value 60 if it allows leap-seconds.
    seconds: int = betterproto.int32_field(3)
    # Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
    nanos: int = betterproto.int32_field(4)
