# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
### Changed
### Deprecated
### Removed
### Fixed
## [v0.3.3] - 2022-11-22
### Added
### Changed
### Deprecated
### Removed
### Fixed
- The optional dependencies was also specified as test and dev only, which
is not what we want. We want them optional, but all environments.
### Security
## [v0.3.2] - 2022-11-22
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Issue #19. Could not compile when the dependant project did not have Ecto included,
which was a bug.
### Security
## [v0.3.1] - 2022-11-21
### Added
- Added type and typespecs for builtin types.
- Added additional documentation in `Interval`
### Changed
### Deprecated
### Removed
### Fixed
### Security
## [v0.3.0] - 2022-11-21
### Added
- Mostly automatic support `Ecto.Type` (including for builtin interval types)
- `left/1` and `right/1` to extract the left and right values from the interval.
- Builtin `Jason.Encoder` support.
- `Interval.__using__` option `jason_encoder` for including encoder. Defaults to `true`.
- `Interval.to_map/1` to convert an Interval struct to a map suitible for JSON and similar serialization.
- `Interval.Decimal` for `Decimal` support.
### Changed
- `Interval.__using__` option `discrete` is now optional, and defaults to `false`
### Deprecated
### Removed
### Fixed
### Security
## [v0.2.0] - 2022-10-27
### Added
- Allow opting out of built in implementations by configuring `:interval, Interval.Float: false`
- Adding `Interval.Intervalable` protocol, which allows you to define what interval implementation
to use for value types. This is purely for ergonomic reasons.
- Special-case for empty intervals, which doesn't require implementation-specific behaviour.
- Adding `Interval.contains_point?/2`
- Adding `Interval.partition/2`
- Adding `Interval.size/1`
### Changed
- Various `RuntimeError`s handling bad input to a function has been converted to `ArgumentError`s
- `Point.previous(a)` and `Point.next(a)` became `point_step/2` in the `Interval.Behaviour`.
- `Interval.new/1` now requires a `:module` option of the specific implementation to use,
however the implementation has a `new/1` that infers this when creating new intervals.
### Removed
- The idea of a "zero" point was removed because it doesn't make sense for all intervals.
- Removed the `Interval.Point` protocol in favor of a behaviour for the entire interval.
- Removed `Interval.size/2`
## [v0.1.3] - 2022-10-12
### Added
- Added `Interval.size/2`.
- Added parameterized typespec `t:Interval.t/1`
### Changed
- The internal `Endpoint` struct has been replaced by a simple 2-tuple.
- Empty intervals are now represented by two identical exclusive points.
### Fixed
- Fixed a bug in `Interval.intersection/2` and `Interval.union/2` that causes incorrect bounds
in some cases.
## [v0.1.2] - 2022-10-10
### Fixed
- Fixed a correctness bug in intersection, where intersections between
intervals containing unbounded endpoints would be incorrectly computed.