[−][src]Module xnde::tracks
Track type
Introduction
This module introduces the Track
struct, which represents a single track in your Winamp
Music Library. The idea is to map each record in the NDE "main" table to a Track
instance.
Track
derives the Serialize
Serde
trait, making it easy to write to file.
Discussion
This is probably the module with which I am the least satisfied. The design problem is:
-
the attributes of a track shall be derived at runtime from the columns in the Music Library Database main table rather than fixed at compile time.
-
even at runtime, within the table, not every column is guaranteed to appear in any given record
I solved this by first building a mapping from column ID to track attributes (when reading the
first record of the table). For each subsequent record, that lets me map each field (for which I
have a column ID) to the corresponding track attribute. I use a per-record map of
TrackAttribute
to FieldValue
to keep track of what I've seen so far (since I don't want
to count even on the fields appearing in the same order). Finally, once I've parsed the entire
record, I read the elements out & into the new Track
instance.
The basic design isn't awful, but the implementation code is prolix & inelegant. Suggestions welcome.
Structs
Error | |
Track | Winamp Music Library track |
Enums
Cause | |
TrackAttrs | Enumerated set of attributes which Track may include |
Functions
new_column_map | Build a ColumnMap from the columns in a table's first record |
Type Definitions
ColumnMap | Map NDE table columns (discovered at runtime) to Track attributes (fixed at compile-time) |
Result |