Distinguish between scalars and length-1 vectors when saving/loading lists.
This effectively unboxes all length-1 vectors in a list, by default; this is probably the more reasonable expectation for other languages that have a concept of scalars.
Users can override this by calling I()
on elements that they want to keep as length-1 vectors, in the same manner as jsonlite.
Streamlined the definition of the Rfc3339 class so that it behaves better with I()
.
Normalize paths to resolve ~
prior to calling C++ code.
Open HDF5 files in read-only mode to avoid permission-related problems for readObject()
-dispatched functions.
Store numbers at maximum precision when saving lists in the JSON format via saveObject()
.
Added the saveObject
and readObject
functions,
which comply with the newly formalized takane specifications for each object's on-disk representation.
This enables greater consistency across language frameworks (e.g., Python) by using a common library for enforcing the specification.
It also eliminates the need for a separate metadata file, simplifying the user experience and the expectations on extension developers.
Added a dedicated validateObject
function, which uses the takane libary to validate each object's files.
This allows users to easily check if a set of files is compliant with the specification, e.g., when modifying parts of the object outside of saveObject
.
Soft-deprecation of the stageObject
and loadObject
functions.
These use legacy representations that do not comply with the tightened takane specifications.