Add types.Duration for the RFC 3339 duration format#144
Merged
Conversation
Closes: #66 The OpenAPI "duration" format references the RFC 3339 appendix A duration grammar, which the Go standard library does not implement, and the available third-party parsers are unmaintained or parse-only. types.Duration stores the parsed components (years, months, weeks, days, hours, minutes, seconds), so any spec-valid duration round-trips losslessly through ParseDuration and String — calendar components have no fixed length in wall-clock time and cannot be represented by a time.Duration. The parser follows the RFC grammar strictly (component order and uniqueness, weeks exclusive, no negatives), with one documented interoperability deviation: fractional seconds are accepted (period or comma) and emitted when present. TimeDuration and FromTimeDuration bridge to time.Duration where the conversion is well-defined: years and months error, weeks and days convert at the fixed 7-day/24-hour convention. JSON and text marshaling plus a Binder implementation make Duration a scalar binding target for parameters, like types.Date. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes: #66
The OpenAPI "duration" format references the RFC 3339 appendix A duration grammar, which the Go standard library does not implement, and the available third-party parsers are unmaintained or parse-only.
types.Duration stores the parsed components (years, months, weeks, days, hours, minutes, seconds), so any spec-valid duration round-trips losslessly through ParseDuration and String — calendar components have no fixed length in wall-clock time and cannot be represented by a time.Duration. The parser follows the RFC grammar strictly (component order and uniqueness, weeks exclusive, no negatives), with one documented interoperability deviation: fractional seconds are accepted (period or comma) and emitted when present.
TimeDuration and FromTimeDuration bridge to time.Duration where the conversion is well-defined: years and months error, weeks and days convert at the fixed 7-day/24-hour convention. JSON and text marshaling plus a Binder implementation make Duration a scalar binding target for parameters, like types.Date.