package pgtype <% [ ["Int4range", "Int4"], ["Int8range", "Int8"], ["Numrange", "Numeric"], ["Tsrange", "Timestamp"], ["Tstzrange", "Timestamptz"], ["Daterange", "Date"], ["Float8range", "Float8"] ].each do |range_type, element_type| %> type <%= range_type %> struct { Lower <%= element_type %> Upper <%= element_type %> LowerType BoundType UpperType BoundType Valid bool } func (r <%= range_type %>) IsNull() bool { return !r.Valid } func (r <%= range_type %>) BoundTypes() (lower, upper BoundType) { return r.LowerType, r.UpperType } func (r <%= range_type %>) Bounds() (lower, upper interface{}) { return &r.Lower, &r.Upper } func (r *<%= range_type %>) ScanNull() error { *r = <%= range_type %>{} return nil } func (r *<%= range_type %>) ScanBounds() (lowerTarget, upperTarget interface{}) { return &r.Lower, &r.Upper } func (r *<%= range_type %>) SetBoundTypes(lower, upper BoundType) error { if lower == Unbounded || lower == Empty { r.Lower = <%= element_type %>{} } if upper == Unbounded || upper == Empty { r.Upper = <%= element_type %>{} } r.LowerType = lower r.UpperType = upper r.Valid = true return nil } <% end %>