Skip to main content

Crate fit

Crate fit 

Source
Expand description

Garmin FIT protocol SDK for Rust — pure-Rust decoder + encoder for v21.200 .fit files (workouts, activities, courses, settings, etc.).

§Quick start

use fit::{Decoder, Encoder};

let bytes = std::fs::read("Activity.fit")?;

// Decode every message with all transforms applied (DateTime, enum
// strings, scale/offset, components, sub-fields, dev fields).
let (messages, errors) = Decoder::builder(&bytes).build().read_all();
assert!(errors.is_empty());

// Encode the typed messages back into a FIT binary.
let encoded: Vec<u8> = Encoder::new().encode(&messages)?;
fit::check_integrity(&encoded)?;

§Module map

APIPurpose
is_fit / check_integrityQuick file-level validation
FileHeader / ByteStreamLow-level header + byte cursor
Decoder / RawMessageStreaming raw-message iterator
DecoderBuilder / TypedDecoder / MessageProfile-aware typed pipeline
Encoder / EncoderBuilderRound-trip back to FIT binary
crc / base_type / record_headerProtocol primitives
profileGenerated Profile.xlsx tables (see MesgNum, MesgInfo, FieldInfo)
transformsRe-exports of the M5 transform helpers (datetime / enum / scale / components)
merge_heart_rates / decode_memo_globM6 post-processing helpers
FitErrorSingle error type used by every fallible operation

See the repository for the milestone log and companion tools.

Re-exports§

pub use base_type::BaseType;
pub use dev_fields::DevFieldInfo;
pub use dev_fields::DevFieldRegistry;
pub use transforms::decode_memo_glob;
pub use transforms::merge_heart_rates;

Modules§

base_type
FIT base types — the 17 primitive wire types referenced by every Definition message’s field-type byte.
crc
CRC-16 calculation for FIT files.
datetime
FIT timestamp conversions.
dev_fields
Developer field schema registry.
output_stream
Growing byte buffer with little-endian write helpers.
profile
FIT profile metadata: enum types, message numbers, and per-field schema.
transforms
Transform pipeline that converts a RawMessage into a typed Message.

Structs§

ByteStream
A read cursor over a borrowed byte slice.
Decoder
The streaming decoder. Implements Iterator yielding one Result<RawMessage, FitError> per Data record.
DecoderBuilder
Builder for TypedDecoder. Created by Decoder::builder.
DeveloperFieldDefinition
One developer-field reference inside a Definition.
Encoder
FIT file encoder.
EncoderBuilder
Chainable builder for Encoder. Defaults match Encoder::new.
Field
One field of a fully-transformed message.
FieldDefinition
One field’s wire-level shape inside a Definition message.
FileHeader
Parsed FIT file header.
LocalDefinitions
The 16-slot local-definition table.
Message
A fully-transformed FIT message.
MessageDefinition
A complete Definition message.
RawDevField
A developer field’s wire bytes, awaiting M6 schema resolution.
RawField
A standard field’s decoded value.
RawMessage
One decoded FIT message.
TransformOptions
Toggleable transforms. All default to true (matches the JS SDK’s “decode richly” preset). Disable individually to get cheaper / less opinionated output.
TypedDecoder
Typed-message iterator. Yields one Message per Data record from the underlying Decoder.

Enums§

Endian
Endianness selector for multi-byte reads.
FieldKind
Provenance of a field — distinguishes Profile-declared standard fields from runtime-registered developer fields.
FieldTooLargeKind
Tag identifying which protocol field exceeded its 255-byte u8 cap. Kept separate so FitError stays heap-free.
FitError
Anything that can go wrong while reading a FIT file.
RawValue
A decoded field value.
RecordHeader
Classification of a single record-header byte.
Value
A fully-transformed field value.

Constants§

LOCAL_DEFINITION_SLOTS
Maximum number of simultaneously valid local message definitions.

Functions§

check_integrity
Fully verify a FIT file’s CRCs.
crc16
Compute the CRC-16 over a byte slice. Thin wrapper around crc::calculate.
is_fit
Quick check: does this byte slice plausibly hold a FIT file?