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.
Summary of changes
This introduces a new
Message
protocol and associated structs as part of the ongoing refactoring effort. These new structs represent a piece of sign content at a purely semantic level, in contrast with the existingContent.Message
structs which encode more concrete, line-level content. The new protocol allows these abstract messages to be "rendered" into various concrete visual (and eventually audio) forms.Conceptually, message generation is broken into several steps: First, generate the abstract messages to display. Then, optionally transform these messages, e.g. to combine headway or alert statuses. Finally, render the messages into actual line content, including flipping, shortening, or paging as needed.
One immediate benefit of this change is that the message generation algorithm is no longer split between the platform and mezzanine cases. A followup PR will leverage this new framework to generate audio messages as well.
Note that although we still assume we're dealing with at most 2 messages, nothing about this approach specifically requires that. It would be reasonably straightforward to support more messages at some point by rewriting
transform_messages
andrender_messages
accordingly.