Documentation ¶
Index ¶
- Variables
- func ParseDay(day string) (time.Weekday, bool)
- func ValidDay(day string) error
- type ChangeNotifyFunc
- type Controller
- func (ctrl *Controller) AddOpeningHours(ctx context.Context, timeRanges ...Definition) error
- func (ctrl *Controller) Country() string
- func (ctrl *Controller) ForDate(ctx context.Context, date time.Time) []OpeningHour
- func (ctrl *Controller) Location() *time.Location
- func (ctrl *Controller) NotifyChange(ctx context.Context, changeType string, id string, sec *conf.Section) error
- func (ctrl *Controller) OnChange(fn ChangeNotifyFunc)
- func (ctrl *Controller) UpcomingFrames(ctx context.Context, dateTime time.Time, limit int) []daytime.TimeRange
- func (ctrl *Controller) Validate(ctx context.Context, sec runtime.Section) error
- type Definition
- type HolidayCache
- type HolidayGetter
- type OpeningHour
- type OpeningHourSlice
- type PublicHoliday
Constants ¶
This section is empty.
Variables ¶
var ( // AddToSchema adds the opening hour definition/config spec to the // provided cofig schema. AddToSchema = configBuilder.AddToSchema )
var Spec = conf.SectionSpec{ { Name: "OnWeekday", Description: "A list of days (Mo, Tue, Wed, Thu, Fri, Sat, Sun) at which this section takes effect", Type: conf.StringSliceType, Annotations: new(conf.Annotation).With( runtime.OneOf( runtime.PossibleValue{ Value: "Mon", Display: "Monday", }, runtime.PossibleValue{ Value: "Tue", Display: "Tuesday", }, runtime.PossibleValue{ Value: "Wed", Display: "Wednesday", }, runtime.PossibleValue{ Value: "Thu", Display: "Thursday", }, runtime.PossibleValue{ Value: "Fri", Display: "Friday", }, runtime.PossibleValue{ Value: "Sat", Display: "Saturday", }, runtime.PossibleValue{ Value: "Sun", Display: "Sunday", }, ), ), }, { Name: "UseAtDate", Description: "A list of dates at which this section takes effect. Format is defined MM/DD", Type: conf.StringSliceType, }, { Name: "OpenBefore", Type: conf.DurationType, Description: "Defines how long before the opening hour the entry door to should get unlocked.", }, { Name: "CloseAfter", Type: conf.DurationType, Description: "Defines how long after the opening hour the entry door should get locked.", }, { Name: "TimeRanges", Type: conf.StringSliceType, Description: "A list of office/opening hour time ranges (HH:MM - HH:MM).", Required: true, }, { Name: "Holiday", Type: conf.StringType, Description: "Whether or not this opening hour counts on holidays. Possible values are 'yes' (normal and holidays), 'no' (normal only) or 'only' (holiday only).", Annotations: new(conf.Annotation).With( runtime.OneOf( runtime.PossibleValue{ Value: "yes", Display: "Yes", }, runtime.PossibleValue{ Value: "no", Display: "No", }, runtime.PossibleValue{ Value: "only", Display: "Only", }, ), ), }, }
Spec describes the different configuration stanzas for the Definition struct.
Functions ¶
Types ¶
type ChangeNotifyFunc ¶
type ChangeNotifyFunc func()
ChangeNotifyFunc can be registered at the Controller to get notified when new opening hours have been configured.
type Controller ¶
type Controller struct {
// contains filtered or unexported fields
}
Controller keeps track of opening hours.
func New ¶
func New(ctx context.Context, cfg cfgspec.Config, globalSchema *runtime.ConfigSchema, holidays HolidayGetter) (*Controller, error)
New returns a new opening hour controller.
func (*Controller) AddOpeningHours ¶
func (ctrl *Controller) AddOpeningHours(ctx context.Context, timeRanges ...Definition) error
func (*Controller) Country ¶
func (ctrl *Controller) Country() string
Country returns the name of the country the controller is configured for. The country is important to detect public holidays.
func (*Controller) ForDate ¶
func (ctrl *Controller) ForDate(ctx context.Context, date time.Time) []OpeningHour
func (*Controller) Location ¶
func (ctrl *Controller) Location() *time.Location
Location returns the location the controller is configured for.
func (*Controller) NotifyChange ¶
func (*Controller) OnChange ¶
func (ctrl *Controller) OnChange(fn ChangeNotifyFunc)
OnChange registers fn to be called whenever the configured opening hours change.
func (*Controller) UpcomingFrames ¶
type Definition ¶
type Definition struct { // OnWeekday is a list of days (Mo, Tue, ...) on which this opening // hours take effect. OnWeekday []string // UseAtDate is a list of dates on which this opening hours take effect. // UseAtDate should have the format MM/DD and are year independent. UseAtDate []string // OpenBefore describes the amount of time the entry door // should open before the specified time. OpenBefore time.Duration // CloseAfter describes the amount of time the entry door // should close after the specified time. CloseAfter time.Duration // TimeRanges describe the opening hours on the specified days // in the format of HH:MM - HH:MM. TimeRanges []string Holiday string // contains filtered or unexported fields }
Definition is used to describe the opening and office hours.
func (*Definition) Validate ¶
func (opt *Definition) Validate() error
Validate validates the opening hours defined in opt.
type HolidayCache ¶
type HolidayCache struct {
// contains filtered or unexported fields
}
HolidayCache can load holidays for countries and supports caching the results.
func NewHolidayCache ¶
func NewHolidayCache() *HolidayCache
NewHolidayCache returns a new holiday cache.
func (*HolidayCache) Get ¶
func (cache *HolidayCache) Get(ctx context.Context, country string, year int) ([]PublicHoliday, error)
Get returns a list of public holidays for the given two-letter ISO country code in the given year. If the holidays have already been loaded they are served from cache.
type HolidayGetter ¶
type HolidayGetter interface { // Get returns a list of public holidays for the given // country and year. Get(ctx context.Context, country string, year int) ([]PublicHoliday, error) // IsHoliday returns true if d is a public holiday in // country. IsHoliday(ctx context.Context, country string, d time.Time) (bool, error) }
HolidayGetter allows to retrieve holidays.
type OpeningHour ¶
type OpeningHour struct { daytime.Range ID string `json:"id"` Holiday bool `json:"holiday"` OpenBefore time.Duration `json:"closeBefore"` CloseAfter time.Duration `json:"closeAfter"` }
OpeningHour describes a single business-open time range with an additional OpenBefore and CloseAfter threshold for the entry door.
func (OpeningHour) EffectiveClose ¶
func (oh OpeningHour) EffectiveClose() time.Duration
EffectiveClose returns the duration from midnight at which the door should close.
func (OpeningHour) EffectiveOpen ¶
func (oh OpeningHour) EffectiveOpen() time.Duration
EffectiveOpen returns the duration from midnight at which the door should open.
func (OpeningHour) String ¶
func (oh OpeningHour) String() string
type OpeningHourSlice ¶
type OpeningHourSlice []OpeningHour
OpeningHourSlice is a slice of opening hours used for sorting.
func (OpeningHourSlice) Len ¶
func (os OpeningHourSlice) Len() int
func (OpeningHourSlice) Less ¶
func (os OpeningHourSlice) Less(i, j int) bool
func (OpeningHourSlice) Swap ¶
func (os OpeningHourSlice) Swap(i, j int)
type PublicHoliday ¶
type PublicHoliday struct { Date string `json:"date"` LocalName string `json:"localName"` Name string `json:"name"` CountryCode string `json:"countryCode"` Fixed bool `json:"fixed"` Global bool `json:"global"` // Type may be Public, Bank, School, Authorities, Optional, Observance Type string `json:"type"` }
PublicHoliday represents a public holiday record returned by date.nager.at.
func LoadHolidays ¶
LoadHolidays loads all public holidays for the given country and year from the Nager Holiday API. Users should cache the response as it won't change for the given year anyway.