High-level profile-backed message container returned by readfit.
struct DecodedMessage
global_message_number::UInt16
name::Symbol
fields::Vector{DecodedField}
endDecoded field container produced from the FIT global profile.
struct DecodedField
field_num::UInt8
developer_data_index::Union{Nothing,UInt8}
name::Symbol
type_name::Symbol
units::String
raw_value
value
source::Symbol
endBase.@kwdef struct ParserOptions{L}
enable_logging::Bool = false
log_level::Symbol = :warn
logger::L = nothing
strict::Bool = true
validate_crc::Bool = true
endenable_logging: enable parse logging hookslog_level: requested log levellogger: optional logger sink objectstrict: strict parse mode (reserved for parser behavior controls)validate_crc: validate trailing FIT file CRC when present
Base.@kwdef struct DecodeOptions
process_invalids::Bool = true
decode_enums::Bool = true
apply_scale_offset::Bool = true
convert_datetime::Bool = true
endThese control high-level decode behavior used by readfit.
parsefit(path::AbstractString; options::ParserOptions=ParserOptions())
parsefit(io::IO; options::ParserOptions=ParserOptions())Returns a FitCoreResult containing raw parsed records.
Behavior notes:
- parsing is bounded by
header.data_size - validates file CRC in path mode when CRC bytes are present and
validate_crc=true - throws FIT-specific errors for malformed inputs
eachmessage(path::AbstractString; options::ParserOptions=ParserOptions())
eachmessage(io::IO; options::ParserOptions=ParserOptions())Returns an iterator over parsed core records.
readfit(path_or_io;
options::ParserOptions=ParserOptions(),
decode::DecodeOptions=DecodeOptions(),
materialize::Bool=true)Returns FitAnalysisResult with grouped decoded messages in by_name:
- known FIT profile names such as
:record,:lap,:session,:event,:file_id - unknown messages grouped under synthetic names like
:unknown_msg_250
messages(core::FitCoreResult, ::Type{T}) where {T}
messages(fit::FitAnalysisResult, ::Type{T}) where {T}
messages(fit::FitAnalysisResult; name)Use name as Symbol or AbstractString for bucket access.
Special case:
messages(fit; name=:unknown)aggregates all unknown synthetic message buckets
fieldvalue(msg::DecodedMessage, name::Symbol)
fieldvalue(msg::DecodedMessage, field_num::UInt8)
fieldraw(msg::DecodedMessage, name::Symbol)
fieldraw(msg::DecodedMessage, field_num::UInt8)
findfield(msg::DecodedMessage, name::Symbol)
findfield(msg::DecodedMessage, field_num::UInt8)These are the primary accessors for decoded messages:
fieldvaluereturns the human-friendly decoded valuefieldrawreturns the raw parser value before profile transformsfindfieldreturns the fullDecodedFieldornothing
to_table(fit::FitAnalysisResult; message::Symbol=:record, extras_policy::Symbol=:wide)Returns Vector{NamedTuple} compatible with Tables.jl.
message should be any decoded message name, typically one returned by keys(fit.by_name).
extras_policy behavior:
:wide: one row per message with decoded fields merged into columns:long: one row per decoded field with message metadata, source, units, raw value, and decoded value
FitCoreResult: low-level parse output (header,records)FitAnalysisResult: high-level grouped output (header,by_name)
Defined in src/utils/errors.jl:
FitFormatErrorFitChecksumErrorFitNotImplementedError
These are currently not exported. Access as FitAPI.FitFormatError, etc.