Documentation
¶
Overview ¶
Package factory contains predefined messages based on messages in [Profile.xlsx] provided in the Official Fit SDK. This package handles message and field creation, as well as registering manufacturer specific messages to be used for certain manufacturer's generated Fit file. You can always generate your own custom SDK using cmd/fitgen, but for those who prefer using this SDK as it is, what this package provides might be sufficient.
Index ¶
Constants ¶
const ( // NameUnknown is unknown message or field name NameUnknown string = "unknown" )
Variables ¶
var ( // ErrRegisterForbidden occurs when trying to create manufacturer specific message outside available range. ErrRegisterForbidden = errors.New("register is forbidden") )
Functions ¶
func CreateField ¶
CreateField creates new field based on defined messages in the factory. If not found, it returns new field with "unknown" name.
Field's FieldBase is a pointer struct embedded, and this will only create a shallow copy of the field, so changing any value declared in FieldBase is prohibited (except fot the unknown field) since it still referencing the same struct. If you want a deep copy of the Field, create it by calling field.Clone().
func CreateMesg ¶
CreateMesg creates new message based on defined messages in the factory. If not found, it returns new message with "unknown" name.
This will create a shallow copy of the Fields, so changing any value declared in Field's FieldBase is prohibited (except fot the unknown field). If you want a deep copy of the mesg, create it by calling mesg.Clone().
func CreateMesgOnly ¶
CreateMesgOnly is similar to CreateMesg, but it sets Fields to nil. This is useful when we plan to fill these values ourselves to avoid unnecessary malloc when cloning them, as they will be removed anyway. For example, the decoding process will populate them with decoded data.
func RegisterMesg ¶
RegisterMesg registers a new message that is not defined in the profile.xlsx. You can not edit or replace existing predefined messages in the factory, you can only edit the messages you have registered. However, we don't create a lock for efficiency, since this is intended to be used on instantiation. If you want to change something without triggering data race, you can create a new instance of Factory using New().
By registering, any Fit file containing these messages can be recognized instead of returning "unknown" message.
Types ¶
type Factory ¶
type Factory struct {
// contains filtered or unexported fields
}
Factory handles creation and registration for Fit's message and field.
func New ¶
func New() *Factory
New creates new Factory with predefined messages. Use this if you work with multiple manufacturers that have different manufacturer specific messages, Otherwise, use StandardFactory().
New is not receiving messages on purpose: to comply with Fit term and conditions which is not allowing edit on existing messages. Receiving messages through here means we need to validate all of it, while RegisterMesg is already exist for that purpose.
func (*Factory) CreateField ¶
CreateField creates new field based on defined messages in the factory. If not found, it returns new field with "unknown" name.
Field's FieldBase is a pointer struct embedded, and this will only create a shallow copy of the field, so changing any value declared in FieldBase is prohibited (except fot the unknown field) since it still referencing the same struct. If you want a deep copy of the Field, create it by calling field.Clone().
func (*Factory) CreateMesg ¶
CreateMesg creates new message based on defined messages in the factory. If not found, it returns new message with "unknown" name.
This will create a shallow copy of the Fields, so changing any value declared in Field's FieldBase is prohibited (except fot the unknown field). If you want a deep copy of the mesg, create it by calling mesg.Clone().
func (*Factory) CreateMesgOnly ¶
CreateMesgOnly is similar to CreateMesg, but it sets Fields to nil. This is useful when we plan to fill these values ourselves to avoid unnecessary malloc when cloning them, as they will be removed anyway. For example, the decoding process will populate them with decoded data.
func (*Factory) RegisterMesg ¶
RegisterMesg registers a new message that is not defined in the profile.xlsx. You can not edit or replace existing predefined messages in the factory, you can only edit the messages you have registered. However, we don't create a lock for efficiency, since this is intended to be used on instantiation. If you want to change something without triggering data race, you can create a new instance of Factory using New().
By registering, any Fit file containing these messages can be recognized instead of returning "unknown" message.