# rs-bag
## Description
A library to read, write and modify [ROS 2](https://www.ros.org/)
[rosbag2](https://github.com/ros2/rosbag2) storage files (sqlite3 `.db3`),
implemented in pure Rust on top of the [turso](https://github.com/tursodatabase/turso)
SQLite engine — no ROS installation required.
### Features
- Open an existing rosbag directory or create a new one (optionally
split into multiple `.db3` files)
- Read messages as raw CDR bytes (`RawReadIterator`) or deserialize them
directly into any `serde` type (`TypedReadIterator<T>`)
- Filter reads by topic names and/or a timestamp interval
- Insert new messages serialized via `serde` + CDR
- Access the bag's topics and metadata
Message **modification** and full **metadata support** are not
implemented yet — see the TODOs below.
### Current state
This crate is in an early stage (pre-1.0). The read path works for
single-file and split bags, but some APIs are still unimplemented stubs
(that will panic) and split-bag opening assumes a single `.db3` per bag.
## TODOs
- [x] Opening an existing rosbag
- [x] Reading messages
- [x] Based on a topic name
- [x] Based on an interval
- [x] RawReadIterator
- [x] TypedReadIterator
- [x] Get index (Hashmap of timestamps per topic)
- [x] Get topics per db3 file
- [x] Unify topics with each db3 file's topic_id
- [ ] Metadata File
- [ ] Read existing metadata
- [ ] Create metadata for rosbag
- [x] Writing messages
- [x] Insert messages
- [x] Push/Pop Operations
- [x] Use ReadIterator for Pop Operations
- [x] Add and remove topics
- [ ] Modify messages
- [ ] Create mutable message type
- [ ] Reuse functions of Reader and make Message mutable